from .features import Dictionary, RegexMatches, Stopwords

name = "persian"

try:
    import enchant
    dictionary = enchant.Dict("fa")
except enchant.errors.DictNotFoundError:
    raise ImportError("No enchant-compatible dictionary found for 'fa'.  " +
                      "Consider installing 'myspell-fa'.")

dictionary = Dictionary(name + ".dictionary", dictionary.check)
"""
:class:`~revscoring.languages.features.Dictionary` features via
:class:`enchant.Dict` "fa".  Provided by `myspell-fa`
"""

stopwords = set([
    "آثار", "آری", "آغاز", "آمریکا",
    "آنها", "اثر", "اساس", "است", "استان",
    "استفاده", "اسلام", "اسلامی", "اشاره",
    "اصلی", "اطلاعات", "افراد", "اما",
    "امکان", "انبار", "انجام", "اندازه",
    "انگلیسی", "اهالی", "اهل", "اول",
    "اولین", "اين", "اگر", "ایالات", "ایران",
    "ایرانی", "این", "بار", "بازیابی",
    "باشد", "بانی", "باید", "بخش", "بدون",
    "برای", "برخی", "بزرگ", "بسیار",
    "بسیاری", "بعد", "بنا", "بناهای",
    "بود", "بودند", "بوده",
    "بیرون", "بیش", "بیشتر", "بین",
    "تاریخ", "تاریخی", "ترتیب",
    "تشکیل", "تصویر", "تغییر",
    "تلفن", "تمام", "تنها",
    "تهران", "توجه", "توسط",
    "جعبه", "جلالی", "جمله",
    "جنگ", "جهان", "جهانی", "حال",
    "حدود", "حذف", "حروف", "خرد", "خود",
    "داد", "داده", "دارای", "دارد", "دارند",
    "داشت", "داشته", "دانشگاه",
    "درباره", "درگذشتگان", "دست", "دلیل",
    "دهد", "دور", "دوران", "دوره",
    "دوم", "دیرینگی", "دیگر", "دیگری",
    "راه", "رده", "رسمی", "روز", "روی",
    "زادگان", "زبان", "زمان", "زمانی",
    "زمینه", "زنده", "زندگی", "زیادی",
    "زیر", "ساخت", "ساخته", "سازمان",
    "سال", "سال‌های", "سده", "سرعت",
    "سپتامبر", "سیاسی", "شامل", "شدن",
    "شدند", "شده", "شده‌است", "شرکت",
    "شهر", "شهرستان", "شود", "صفحه",
    "صورت", "علی", "عنوان", "غیر",
    "فارسی", "فعالیت", "فعلی", "فهرست",
    "فوریه", "قبل", "قدیمی", "قرار",
    "مالک", "مانند", "ماه", "متحده", "محل",
    "محلی", "محمد", "مختلف",
    "مدرک", "مردم", "مرمت", "مرکز",
    "مرکزی", "مرگ", "مسکونی",
    "مسیر", "معروف", "مقاله", "مقاله‌های",
    "ملی", "منابع", "مناطق", "منبع",
    "منطقه", "مورد", "میان",
    "میلادی", "می‌باشد", "می‌توان",
    "می‌دهد", "می‌شود", "می‌شوند", "می‌کند",
    "می‌کنند", "نادرست", "ناشر",
    "نام", "نام‌های", "نشان", "نشانی", "نشریه",
    "نظر", "نفر", "نوع", "نویسنده",
    "نیز", "نیست", "های", "هزار", "هستند",
    "همان", "همراه", "همه", "همچنین",
    "همین", "وابسته", "واقع", "وبگاه", "وب‌گاه",
    "وجود", "ولی", "ویکی",
    "پانویس", "پایان", "پایه", "پرونده",
    "پیش", "پیوند", "چند", "چون", "ژورنال",
    "کار", "کاربری", "کتاب", "کرد",
    "کردن", "کردند", "کرده", "کشور",
    "کشورهای", "کند", "کنند", "کنونی",
    "گرفت", "گرفته", "گروه", "گفته",
    "یافت", "یونسکو", "یکی"
])

stopwords = Stopwords(name + ".stopwords", stopwords)
"""
:class:`~revscoring.languages.features.Stopwords` features copied from
"common words" in https://meta.wikimedia.org/wiki/?oldid=13044766
"""

badword_regexes = [
    r"(madar|nanae|zan|khahar)\s*?(ghahbeh|ghahveh|ghabe|jendeh?|be khata)",
    r"khar madar",  # Sister and mother (only used in swears)
    r"khar kos deh",  # Sister is whore
    # Pussy|ass|penis|anus (open so I (suck|tear|fuck)|sister|pimp|your mother
    # |your father|sister|was fucked|is fucked|male prostitute|sucker|big|big
    # |thick|dumb|dumb|fucker|expert!|don't say|nonsense)
    r"([qkc]+o+s+|[qkc]+o+n+|[qkc]+i+r+|m+e+g+h+a+d)\s*?((va|o)\s*?[qkc]oon" +
    r"|lis|pareh?|k+h+a+r+|[qkc]esh|nane|nanat|babat|khah?a?r|abjit|mi ?dad" +
    r"|mi ?dah[iy]|[qkc]on|deh|khor|goshad|gondeh" +
    r"|[qkc]oloft|[qkc]esh|mashang" +
    r"|khol|baz|shenas|nag[uo]o?|maghz|sh[ae]r)",
    r"\bmameh?",  # boob
    r"sho+[mn]bo+l",  # dick in childern language
    r"\brazl",  # asshole
    r"gaei?d[ia]m",  # I fucked
    r"\bk+i+r+i+",  # dick
    r"\bk+o+s+o+",  # pussy
    r"\bk+o+n+i+",  # male prostitue
    r"j+e+n+d+e+h?",  # female prostitue
    r"[qkc]iram",  # my dick
    r"(pedar|baba|naneh?|tokhme?) sag",  # your (father|dad|mother) is dog
    r"pedasag",  # your father is dog
    r"bi (sho+r|shour|sharaf|namo+s)",  # asshole
    r"madareto?",  # your mother
    r"\bamato?",  # your aunt
    r"da[iy]o+s",  # pimp
    r"goh? ?nakhor",  # literally: don't eat shit
    r"\bashghal",  # garbage
    r"\bavazi",  # jerk
    r"کیرم",  # my dick
    r"کونی",  # male prostitute
    r"برووتو",  # go inside (dick in something)
    r"لعنت",  # damn
    r"کاکاسیاه",  # nigger
    r"آشغال",  # garbage
    r"گائیدم",  # I fucked
    r"گوزیده",  # farted
    r"مشنگ",  # dumb
    r"ننتو",  # your mother
    r"بخواب",  # lie down
    r"خار مادر",  # mother and sister
    r"خوار کس ده",  # sister is prostitute
    r"شو?مبول",  # dick in childern language, used to call someone's dick to
    # imply it's as small as childern dick
    r"جنده",  # female prostitue
    r"کاکاسیاه",  # nigger
    r"آشغال",  # garbage
    r"آله",  # and his family (used in prayers for religous figures)
    r"ایتالیک",  # italic
    r"بخواب",  # lie down
    r"برووتو",  # go inside
    r"جمهورمحترم",  # dear president
    r"فرمود",  # said (used for religous figures)
    r"فرمودند",  # ibid
    r"فرموده",  # ibid
    r"لعنت",  # damn
    r"مشنگ",  # dumb
    r"ننتو",  # your mother
    r"کون",  # ass
    r"کونی",  # male prostitute
    r"کیر",  # dick
    r"گائیدم",  # I fucked
    r"گوزیده",  # farted
    r"کیرم",  # my dick
    r"ممه",  # boob
    # your (mother|sister|wife) is prostitute|whore
    r"(ما\.?در|ننه|زن|خو?اه?ر) ?(خرابه|ق\.?[حه]\.?ب\.?ه|قحبه|قبه|" +
    r"ج\.?ن\.?د\.?ه|به خطا)",
    # (pussy|ass|dick|anus|bottom organism)
    # (and ass|sucker|torn|ass|mother|father|sister|
    # was fucked|is fucked|fucks|fucker|sucker)
    r"([کك]+س+|[کك]+و+ن+|[کك]+[یي]+ر+|مقعد|عضو " +
    r"?تحتانی|ما?تحت)\s*(و کون|لیسی?|پاره|خر|[کك]ش|نن[هت]\b|بابات|خو?اه?ر|" +
    r"آبجیت|هم ?شیره|می ?داد|می ?ده?ی|می ?کنی?|کن|خور)",
    # (Ass|Pussy) (donkey|open|big|pimp|torn|your mother|mother|dumb|expert
    # dont't say|dumb|nonsense|mother|sister|your sister|sister|was fucked)
    r"[کك]+(و+ن|س)\s*(خر|گشاد|گنده|کش|مشنگ|پاره|ننت|ننه\b|خل|باز|خور\b|شناس" +
    r"|نگو|مغز|ه؟ ؟شعر|و ?شعر|مادر|خو?اه?ر|آبجیت|هم ?شیره|داد)",
    r"ر[زذ]ل",  # jerk
    # (ass|suck|fuck|mouth) (my)? dick
    r"[کك]+[یي]+ر+\s*م?(ی|خر|(ب|)خور|تو[ی ]|مو |دهن)",
    r"گا[يئی]ید[میي]",  # fucked
    r"گاهييد[نه]",  # fucking
    r"بگامت",  # I fuck you
    r"بی ?(شعور|شرف|ناموس)[یي]",  # dumb|jerk|
    r"(پدر|ننه|مادر|بابا|تخم)\s*سگ",  # son of dog
    r"\پريودى\؟",  # you pooped
    r"مادرت گا",  # your mother fuck
    r"تنت میخاره",  # you like to fight
    r"به کیرم",  # To my dick (means I don't give a shit)
    r"به گا ميدم",  # I fuck
    r"بگای?د",  # fuck
    r"انگشت به كون",  # fingering
    r"برای مادرت",  # To your mother
    r"دیو[سث]",  # pimp
    r"ننتو",  # Your mother
    r"گوزید[نه]?",  # Fart
    r"گه نخور",  # Don't eat shit
    r"چاکت",  # your pussy
    r"جنده",  # slut
    r"گه اضاف[يی] خورد[هیي]",  # eating extra shit
    r"خاک تو سرت",  # soli on your head
    r"[کك][یي]رم",  # dick
    r"ر[یي]د[همی]",  # (I|you|he|she|they) pooped
    r"[کك]ون ?ده",  # male prostitute
    r"[کك]س ?ده",  # female prostitute
    r"گا[یي]ش",  # To fuck
    r"ب[کك]ن ب[کك]ن",  # fuck fuck
    r"([کك]+[یي]+ر+)ی+",  # dick
    r"(به پشت|دمر|دمرو) بخواب",  # lie down
    r"خایه لیس",  # balls sucker
    r"حسن کلیدساز",  # Hasan locksmith (a swaer targeting Rouhani)
    r"کره خر",  # Son of donkey
    r"آشغال ع+و+ض+ی+",  # Jerk
    r"پدسگ",  # short form of "son of dog"
    r"سا[کك] زد",  # sucked (dick)
    r"فاک (‌فنا|یو)",  # "fuck"
    r"برو (گ+م+ش+و|ب+م+ی+ر+)",  # go away
    r"گوه خورد",  # ate shit
    r"شاش اضافه",  # extra piss
    r"آب [کك][یي]رو?",  # semen
    r"[کك]و?س [کك]ردن?",  # to fuck pussy
    r"[کك][یي]ر [کك]لفت",  # big dick
    r"کیونده",  # Afghan varient of male prostitute
    r"جر دادن?",  # tearing (informal)
    r"مردک"  # man (very informal)
]

badwords = RegexMatches(name + ".badwords", badword_regexes)
"""
:class:`~revscoring.languages.features.RegexMatches` features via a list of
badword detecting regexes.
"""

informal_regexes = [
    r"آله", r"فرموده?", r"فرمودند", r"السلام", r"حضرت\b", r"\([سعص]\)",
    r"\(ره\)",
    r"\(قس\)",
    r"\(عج\)", r"\bامام\b", r"فرمودند", r"روحی?‌? ?ا?ل?فدا",
    r"شَ?هید\b", r"آزادهٔ? سرا?فراز",
    r"شادروان", r"جهانخوار", r"مستکبر", r"ملحد", r"ملعون",
    r"(لعن[تة]|رحمت|صلی|صلوات|سلام)‌? ?اللہ", r"دام‌? ?(ظلّ?ه|برکات)",
    r"قدس‌? ?سره‌? ?شریف", r"عل[يی]ه‌? ?السلام",
    r"اسقف محترم", r"خدا[یش]? بیامرز", r"دار فانی", r"به هلاکت",
    r"سَقط شد", r"ا?علیا?‌? ?حضرت",
    r"خادم خادمان", r"مقام معظّ?م", r"(حرم|مرقد) مطهر", r"\bمرحوم\b",
    r"\bشهادت", r"شاهنشاه\b",
    r"علیها", r"مد ?ظله"
]

informals = RegexMatches(name + ".informals", informal_regexes)
"""
:class:`~revscoring.languages.features.RegexMatches` features via a list of
informal word detecting regexes.
"""
