#!/usr/bin/env python3
"""Offline Arabic vocabulary practice. Python 3, standard library only."""
import argparse
import json
import random

WORDS = json.loads('[{"category": "it", "arabic": "حاسوب", "pronunciation": "хаасууб", "russian": "компьютер", "note": "Также говорят كمبيوتر — «комбьютер».", "dialect": ""}, {"category": "it", "arabic": "حاسوب محمول", "pronunciation": "хаасууб махмууль", "russian": "ноутбук", "note": "", "dialect": ""}, {"category": "it", "arabic": "برنامج", "pronunciation": "барнаамадж", "russian": "программа", "note": "", "dialect": ""}, {"category": "it", "arabic": "تطبيق", "pronunciation": "татбиик", "russian": "приложение", "note": "", "dialect": ""}, {"category": "it", "arabic": "موقع إلكتروني", "pronunciation": "мауки‘ иликтрууни", "russian": "веб-сайт", "note": "", "dialect": ""}, {"category": "it", "arabic": "شبكة", "pronunciation": "шабака", "russian": "сеть", "note": "", "dialect": ""}, {"category": "it", "arabic": "خادم", "pronunciation": "хаадим", "russian": "сервер", "note": "Технический термин; в разговоре встречается «сёрвер».", "dialect": ""}, {"category": "it", "arabic": "قاعدة بيانات", "pronunciation": "каа‘идат байаанаат", "russian": "база данных", "note": "", "dialect": ""}, {"category": "it", "arabic": "ملف", "pronunciation": "миляфф", "russian": "файл", "note": "", "dialect": ""}, {"category": "it", "arabic": "مجلد", "pronunciation": "муджалляд", "russian": "папка", "note": "", "dialect": ""}, {"category": "it", "arabic": "كلمة المرور", "pronunciation": "калимат аль-муруур", "russian": "пароль", "note": "", "dialect": ""}, {"category": "it", "arabic": "اسم المستخدم", "pronunciation": "исм аль-мустахдим", "russian": "имя пользователя", "note": "", "dialect": ""}, {"category": "it", "arabic": "تسجيل الدخول", "pronunciation": "тасджииль ад-духууль", "russian": "вход в систему", "note": "", "dialect": ""}, {"category": "it", "arabic": "تحديث", "pronunciation": "тахдиис", "russian": "обновление", "note": "", "dialect": ""}, {"category": "it", "arabic": "نسخة احتياطية", "pronunciation": "нусха ихтийаатыйя", "russian": "резервная копия", "note": "", "dialect": ""}, {"category": "it", "arabic": "خطأ", "pronunciation": "хата’", "russian": "ошибка", "note": "", "dialect": ""}, {"category": "it", "arabic": "اتصال", "pronunciation": "иттисааль", "russian": "соединение; связь", "note": "", "dialect": ""}, {"category": "it", "arabic": "إنترنت", "pronunciation": "интарнит", "russian": "интернет", "note": "", "dialect": ""}, {"category": "it", "arabic": "دعم فني", "pronunciation": "да‘м фанни", "russian": "техническая поддержка", "note": "", "dialect": ""}, {"category": "it", "arabic": "أمن المعلومات", "pronunciation": "амн аль-ма‘люумаат", "russian": "информационная безопасность", "note": "", "dialect": ""}, {"category": "work", "arabic": "عمل", "pronunciation": "‘амаль", "russian": "работа", "note": "", "dialect": ""}, {"category": "work", "arabic": "وظيفة", "pronunciation": "уазыыфа", "russian": "должность; работа по найму", "note": "", "dialect": ""}, {"category": "work", "arabic": "شركة", "pronunciation": "шарика", "russian": "компания", "note": "", "dialect": ""}, {"category": "work", "arabic": "مكتب", "pronunciation": "мактаб", "russian": "офис; письменный стол", "note": "", "dialect": ""}, {"category": "work", "arabic": "فريق", "pronunciation": "фариик", "russian": "команда", "note": "", "dialect": ""}, {"category": "work", "arabic": "زميل", "pronunciation": "замииль", "russian": "коллега", "note": "О женщине: زميلة — «замииля».", "dialect": ""}, {"category": "work", "arabic": "مدير", "pronunciation": "мудиир", "russian": "руководитель", "note": "О женщине: مديرة — «мудиира».", "dialect": ""}, {"category": "work", "arabic": "اجتماع", "pronunciation": "иджтимаа‘", "russian": "совещание; встреча", "note": "", "dialect": ""}, {"category": "work", "arabic": "مشروع", "pronunciation": "машруу‘", "russian": "проект", "note": "", "dialect": ""}, {"category": "work", "arabic": "مهمة", "pronunciation": "мухимма", "russian": "задача", "note": "", "dialect": ""}, {"category": "work", "arabic": "موعد نهائي", "pronunciation": "мау‘ид нихаа’и", "russian": "крайний срок", "note": "", "dialect": ""}, {"category": "work", "arabic": "راتب", "pronunciation": "раатиб", "russian": "зарплата", "note": "", "dialect": ""}, {"category": "work", "arabic": "إجازة", "pronunciation": "иджааза", "russian": "отпуск; выходной по разрешению", "note": "", "dialect": ""}, {"category": "work", "arabic": "دوام", "pronunciation": "дауаам", "russian": "рабочее время; смена", "note": "Например, начало или окончание рабочего дня.", "dialect": ""}, {"category": "work", "arabic": "مقابلة عمل", "pronunciation": "мукаабалят ‘амаль", "russian": "собеседование", "note": "", "dialect": ""}, {"category": "docs", "arabic": "جواز سفر", "pronunciation": "джавааз сафар", "russian": "паспорт", "note": "", "dialect": ""}, {"category": "docs", "arabic": "تأشيرة", "pronunciation": "та’шиира", "russian": "виза", "note": "", "dialect": ""}, {"category": "docs", "arabic": "إقامة", "pronunciation": "икаама", "russian": "резидентство; разрешение на проживание", "note": "", "dialect": ""}, {"category": "docs", "arabic": "هوية إماراتية", "pronunciation": "хауийя имаараатийя", "russian": "Emirates ID", "note": "Удостоверение личности резидента ОАЭ.", "dialect": ""}, {"category": "docs", "arabic": "عقد عمل", "pronunciation": "‘акд ‘амаль", "russian": "трудовой договор", "note": "", "dialect": ""}, {"category": "docs", "arabic": "تصريح عمل", "pronunciation": "тасриих ‘амаль", "russian": "разрешение на работу", "note": "", "dialect": ""}, {"category": "docs", "arabic": "تأمين صحي", "pronunciation": "та’миин сиххи", "russian": "медицинская страховка", "note": "", "dialect": ""}, {"category": "docs", "arabic": "طلب", "pronunciation": "таляб", "russian": "заявление; заявка", "note": "", "dialect": ""}, {"category": "docs", "arabic": "استمارة", "pronunciation": "истимаара", "russian": "бланк; анкета", "note": "", "dialect": ""}, {"category": "docs", "arabic": "توقيع", "pronunciation": "таукии‘", "russian": "подпись", "note": "", "dialect": ""}, {"category": "docs", "arabic": "نسخة", "pronunciation": "нусха", "russian": "копия", "note": "", "dialect": ""}, {"category": "docs", "arabic": "صورة شخصية", "pronunciation": "суура шахсийя", "russian": "фотография на документы", "note": "", "dialect": ""}, {"category": "docs", "arabic": "شهادة", "pronunciation": "шахаада", "russian": "свидетельство; диплом", "note": "Значение зависит от вида документа.", "dialect": ""}, {"category": "docs", "arabic": "موعد", "pronunciation": "мау‘ид", "russian": "назначенная встреча; запись", "note": "", "dialect": ""}, {"category": "docs", "arabic": "تجديد", "pronunciation": "тадждиид", "russian": "продление; обновление документа", "note": "", "dialect": ""}, {"category": "home", "arabic": "شقة", "pronunciation": "шакка", "russian": "квартира", "note": "", "dialect": ""}, {"category": "home", "arabic": "غرفة", "pronunciation": "гурфа", "russian": "комната", "note": "", "dialect": ""}, {"category": "home", "arabic": "إيجار", "pronunciation": "ииджаар", "russian": "аренда", "note": "", "dialect": ""}, {"category": "home", "arabic": "عقد إيجار", "pronunciation": "‘акд ииджаар", "russian": "договор аренды", "note": "", "dialect": ""}, {"category": "home", "arabic": "مالك", "pronunciation": "маалик", "russian": "собственник", "note": "", "dialect": ""}, {"category": "home", "arabic": "مستأجر", "pronunciation": "муста’джир", "russian": "арендатор", "note": "", "dialect": ""}, {"category": "home", "arabic": "مبلغ تأمين", "pronunciation": "мабляг та’миин", "russian": "страховой депозит", "note": "Например, залог при аренде квартиры.", "dialect": ""}, {"category": "home", "arabic": "فاتورة", "pronunciation": "фаатуура", "russian": "счёт к оплате", "note": "", "dialect": ""}, {"category": "home", "arabic": "كهرباء", "pronunciation": "кахрабаа’", "russian": "электричество", "note": "", "dialect": ""}, {"category": "home", "arabic": "ماء", "pronunciation": "маа’", "russian": "вода", "note": "", "dialect": ""}, {"category": "home", "arabic": "تكييف", "pronunciation": "такйииф", "russian": "кондиционирование", "note": "", "dialect": ""}, {"category": "home", "arabic": "صيانة", "pronunciation": "сийаана", "russian": "техническое обслуживание; ремонт", "note": "", "dialect": ""}, {"category": "home", "arabic": "مفتاح", "pronunciation": "мифтаах", "russian": "ключ", "note": "", "dialect": ""}, {"category": "home", "arabic": "عنوان", "pronunciation": "‘унуаан", "russian": "адрес", "note": "", "dialect": ""}, {"category": "home", "arabic": "مفروش", "pronunciation": "мафрууш", "russian": "с мебелью", "note": "О квартире: شقة مفروشة — «шакка мафрууша».", "dialect": ""}, {"category": "money", "arabic": "بنك", "pronunciation": "банк", "russian": "банк", "note": "", "dialect": ""}, {"category": "money", "arabic": "حساب بنكي", "pronunciation": "хисааб банки", "russian": "банковский счёт", "note": "", "dialect": ""}, {"category": "money", "arabic": "بطاقة", "pronunciation": "битаака", "russian": "карта", "note": "", "dialect": ""}, {"category": "money", "arabic": "نقد", "pronunciation": "накд", "russian": "наличные деньги", "note": "", "dialect": ""}, {"category": "money", "arabic": "درهم", "pronunciation": "дирхам", "russian": "дирхам", "note": "", "dialect": ""}, {"category": "money", "arabic": "تحويل", "pronunciation": "тахуииль", "russian": "перевод денег", "note": "", "dialect": ""}, {"category": "money", "arabic": "سعر", "pronunciation": "си‘р", "russian": "цена", "note": "", "dialect": ""}, {"category": "money", "arabic": "إيصال", "pronunciation": "иисааль", "russian": "квитанция; чек", "note": "", "dialect": ""}, {"category": "money", "arabic": "كم؟", "pronunciation": "кам?", "russian": "сколько?", "note": "", "dialect": ""}, {"category": "money", "arabic": "غالي", "pronunciation": "гаали", "russian": "дорогой", "note": "О цене; в стандартной форме غالٍ.", "dialect": "Разговорное"}, {"category": "transport", "arabic": "مطار", "pronunciation": "матаар", "russian": "аэропорт", "note": "", "dialect": ""}, {"category": "transport", "arabic": "سيارة أجرة", "pronunciation": "саййаарат уджра", "russian": "такси", "note": "", "dialect": ""}, {"category": "transport", "arabic": "محطة", "pronunciation": "махатта", "russian": "станция; остановка", "note": "", "dialect": ""}, {"category": "transport", "arabic": "مترو", "pronunciation": "митру", "russian": "метро", "note": "", "dialect": ""}, {"category": "transport", "arabic": "حافلة", "pronunciation": "хаафиля", "russian": "автобус", "note": "", "dialect": ""}, {"category": "transport", "arabic": "تذكرة", "pronunciation": "тазкира", "russian": "билет", "note": "", "dialect": ""}, {"category": "transport", "arabic": "شارع", "pronunciation": "шаари‘", "russian": "улица", "note": "", "dialect": ""}, {"category": "transport", "arabic": "يمين", "pronunciation": "йамиин", "russian": "направо; правая сторона", "note": "", "dialect": ""}, {"category": "transport", "arabic": "يسار", "pronunciation": "йасаар", "russian": "налево; левая сторона", "note": "", "dialect": ""}, {"category": "transport", "arabic": "وين؟", "pronunciation": "уэйн?", "russian": "где?", "note": "Разговорный вариант стандартного أين؟ — «айна?».", "dialect": "Залив"}, {"category": "daily", "arabic": "مرحبا", "pronunciation": "мархаба", "russian": "здравствуйте; привет", "note": "", "dialect": ""}, {"category": "daily", "arabic": "السلام عليكم", "pronunciation": "ас-саляаму ‘алейкум", "russian": "мир вам; здравствуйте", "note": "Ответ: وعليكم السلام — «уа ‘алейкум ас-саляам».", "dialect": ""}, {"category": "daily", "arabic": "شكراً", "pronunciation": "шукран", "russian": "спасибо", "note": "", "dialect": ""}, {"category": "daily", "arabic": "عفواً", "pronunciation": "‘афуан", "russian": "пожалуйста; извините", "note": "Ответ на благодарность или вежливое обращение.", "dialect": ""}, {"category": "daily", "arabic": "من فضلك", "pronunciation": "мин фадлак", "russian": "пожалуйста, будьте добры", "note": "К мужчине — «фадлак», к женщине — «фадлик».", "dialect": ""}, {"category": "daily", "arabic": "نعم", "pronunciation": "на‘ам", "russian": "да", "note": "", "dialect": ""}, {"category": "daily", "arabic": "لا", "pronunciation": "ляа", "russian": "нет", "note": "", "dialect": ""}, {"category": "daily", "arabic": "مع السلامة", "pronunciation": "ма‘а с-саляама", "russian": "до свидания", "note": "", "dialect": ""}, {"category": "daily", "arabic": "هلا", "pronunciation": "халя", "russian": "привет; добро пожаловать", "note": "Неформальное дружеское приветствие.", "dialect": "Залив"}, {"category": "daily", "arabic": "وايد", "pronunciation": "уаайид", "russian": "много; очень", "note": "Эмиратский разговорный вариант; сравните كثير — «касийр».", "dialect": "ОАЭ / Залив"}, {"category": "health", "arabic": "مستشفى", "pronunciation": "мусташфа", "russian": "больница", "note": "", "dialect": ""}, {"category": "health", "arabic": "صيدلية", "pronunciation": "сайдалийя", "russian": "аптека", "note": "", "dialect": ""}, {"category": "health", "arabic": "طبيب", "pronunciation": "таби́иб", "russian": "врач", "note": "О женщине: طبيبة — «табииба».", "dialect": ""}, {"category": "health", "arabic": "ألم", "pronunciation": "алям", "russian": "боль", "note": "", "dialect": ""}, {"category": "health", "arabic": "مساعدة", "pronunciation": "мусаа‘ада", "russian": "помощь", "note": "", "dialect": ""}]')

def main():
 parser=argparse.ArgumentParser(description='Арабский для ОАЭ: тренировка в терминале')
 parser.add_argument('--count',type=int,default=20,help='Количество вопросов (по умолчанию 20)')
 parser.add_argument('--reverse',action='store_true',help='Русский → арабский')
 parser.add_argument('--category',help='Категория: ключ из --list-categories')
 parser.add_argument('--list-categories',action='store_true')
 args=parser.parse_args()
 categories=sorted({w['category'] for w in WORDS})
 if args.list_categories:
  print('\n'.join(categories));return
 if args.count<1:parser.error('--count должен быть больше нуля')
 if args.category and args.category not in categories:parser.error('Неизвестная категория; используйте --list-categories')
 pool=[w for w in WORDS if not args.category or w['category']==args.category]
 questions=random.sample(pool,min(args.count,len(pool)))
 source,target=('russian','arabic') if args.reverse else ('arabic','russian')
 score=0;wrong=[];done=0
 print('Арабский для ОАЭ · выберите 1–4. h — подсказка, q — выход.')
 print('Терминал может неверно отображать направление арабского письма; это не ошибка слова.\n')
 for word in questions:
  distractors=list({w[target] for w in WORDS if w[target]!=word[target]})
  options=random.sample(distractors,3)+[word[target]];random.shuffle(options)
  print(f'\n{done+1}/{len(questions)} · {word[source]}')
  for i,option in enumerate(options,1): print(f'  {i}. {option}')
  while True:
   try:answer=input('Ответ: ').strip().lower()
   except (EOFError,KeyboardInterrupt):answer='q';print()
   if answer=='h':print('Произношение:',word['pronunciation']);continue
   if answer=='q':break
   if answer in ['1','2','3','4']:break
   print('Введите 1, 2, 3, 4, h или q.')
  if answer=='q':break
  done+=1
  if options[int(answer)-1]==word[target]:score+=1;print('Верно.')
  else:wrong.append(word);print('Правильный ответ:',word[target])
  print(word['arabic'],'—',word['pronunciation'],'—',word['russian'])
  if word.get('note'):print(word['note'])
 print(f'\nРезультат: {score}/{done}.')
 if wrong:
  print('Повторите эти слова:')
  for word in wrong:print(word['arabic'],'—',word['pronunciation'],'—',word['russian'])

if __name__=='__main__':main()
