from flask import Flask, render_template, request, send_file, jsonify
import io, os
from datetime import datetime
from fpdf import FPDF
import arabic_reshaper
from bidi.algorithm import get_display

app = Flask(__name__)

BASE       = os.path.dirname(__file__)
FONT_DIR   = os.path.join(BASE, 'static', 'fonts')
LOGO_PATH  = os.path.join(BASE, 'static', 'logo_small.png')
STAMP_PATH = os.path.join(BASE, 'static', 'moc_stamp.png')
MOC_LOGO   = os.path.join(BASE, 'static', 'moc_logo_official.png')

# ── Arabic helper ─────────────────────────────────────────────────────────────
def ar(text):
    if not text:
        return ''
    try:
        return get_display(arabic_reshaper.reshape(str(text)))
    except Exception:
        return str(text)

# ── بيانات البنوك ووسائل الدفع حسب الدولة ─────────────────────────────────────
COUNTRY_DATA = {
    'السعودية': {
        'banks': [
            'بنك الأنماء', 'البنك الأهلي السعودي', 'بنك الراجحي',
            'بنك ساب', 'البنك السعودي الفرنسي', 'بنك الرياض',
            'البنك السعودي للاستثمار', 'بنك البلاد', 'بنك الجزيرة',
            'بنك الخليج الدولي'
        ],
        'payment_methods': ['تحويل بنكي', 'STC Pay', 'كاش', 'طريقة أخرى'],
        'currency': 'ر.س', 'iban_prefix': 'SA', 'phone_code': '+966'
    },
    'الإمارات': {
        'banks': [
            'بنك الإمارات دبي الوطني', 'بنك أبوظبي الأول',
            'بنك أبوظبي التجاري', 'بنك دبي الإسلامي',
            'بنك المشرق', 'سيتي بنك الإمارات',
            'بنك الفجيرة الوطني', 'بنك الشارقة'
        ],
        'payment_methods': ['تحويل بنكي', 'Apple Pay', 'كاش', 'طريقة أخرى'],
        'currency': 'د.إ', 'iban_prefix': 'AE', 'phone_code': '+971'
    },
    'الكويت': {
        'banks': [
            'بنك الكويت الوطني', 'بنك الخليج', 'بنك برقان',
            'بيت التمويل الكويتي (بيتك)', 'البنك الأهلي الكويتي',
            'بنك وربة', 'بنك الكويت الدولي', 'بنك بوبيان',
            'بنك الاتحاد الكويتي'
        ],
        'payment_methods': ['تحويل بنكي', 'K-Net', 'Benefit Pay', 'كاش', 'طريقة أخرى'],
        'currency': 'د.ك', 'iban_prefix': 'KW', 'phone_code': '+965'
    },
    'قطر': {
        'banks': [
            'بنك قطر الوطني (QNB)', 'مصرف قطر الإسلامي', 'بنك الدوحة',
            'بنك قطر الدولي', 'بنك قطر الأول', 'المصرف العربي',
            'بنك الريان', 'بنك بروة', 'بنك الخليج التجاري'
        ],
        'payment_methods': ['تحويل بنكي', 'NAPS', 'Apple Pay', 'كاش', 'طريقة أخرى'],
        'currency': 'ر.ق', 'iban_prefix': 'QA', 'phone_code': '+974'
    },
    'البحرين': {
        'banks': [
            'بنك البحرين الوطني', 'بنك البحرين والكويت', 'بنك أهلي يونايتد',
            'بنك الإسكان', 'بنك الخليج الأول', 'بنك العربي',
            'بيت التمويل الخليجي', 'بنك البحرين الإسلامي'
        ],
        'payment_methods': ['تحويل بنكي', 'BenefitPay', 'كاش', 'طريقة أخرى'],
        'currency': 'د.ب', 'iban_prefix': 'BH', 'phone_code': '+973'
    },
    'عُمان': {
        'banks': [
            'بنك مسقط', 'البنك الوطني العُماني', 'بنك ظفار',
            'بنك صحار الدولي', 'البنك العربي العُماني',
            'بنك نزوى', 'بنك العز الإسلامي'
        ],
        'payment_methods': ['تحويل بنكي', 'OmanNet', 'كاش', 'طريقة أخرى'],
        'currency': 'ر.ع', 'iban_prefix': 'OM', 'phone_code': '+968'
    },
}

NON_GULF_COUNTRIES = [
    'مصر', 'الأردن', 'العراق', 'سوريا', 'لبنان', 'اليمن',
    'ليبيا', 'تونس', 'الجزائر', 'المغرب', 'السودان',
    'موريتانيا', 'الصومال', 'تركيا', 'باكستان', 'الهند', 'دولة أخرى'
]

PHONE_CODES = {
    'مصر': '+20', 'الأردن': '+962', 'العراق': '+964',
    'سوريا': '+963', 'لبنان': '+961', 'اليمن': '+967',
    'ليبيا': '+218', 'تونس': '+216', 'الجزائر': '+213',
    'المغرب': '+212', 'السودان': '+249', 'موريتانيا': '+222',
    'الصومال': '+252', 'تركيا': '+90', 'باكستان': '+92',
    'الهند': '+91', 'دولة أخرى': ''
}

# ── لوحة الألوان: أبيض ورمادي رسمي نقي ─────────────────────────────────────
WHITE       = (255, 255, 255)   # أبيض نقي
OFF_WHITE   = (248, 248, 248)   # أبيض مائل للرمادي الخفيف
LIGHT_GREY  = (235, 235, 235)   # رمادي فاتح جداً
MID_GREY    = (180, 180, 180)   # رمادي متوسط للحدود
DARK_GREY   = (100, 100, 100)   # رمادي داكن للنصوص الثانوية
DEEP_GREY   = (55,  55,  55)    # رمادي داكن جداً للهيدر
NEAR_BLACK  = (30,  30,  30)    # شبه أسود للنصوص الرئيسية
GOLD        = (150, 120, 40)    # ذهبي للخطوط الفاصلة
GOLD_LIGHT  = (190, 160, 65)    # ذهبي فاتح


class AlmeshPDF(FPDF):
    def __init__(self):
        super().__init__()
        self.add_font('Amiri', style='',  fname=os.path.join(FONT_DIR, 'Amiri-Regular-sub.ttf'))
        self.add_font('Amiri', style='B', fname=os.path.join(FONT_DIR, 'Amiri-Bold-sub.ttf'))
        self.set_auto_page_break(auto=False, margin=10)

    def ar_font(self, size=11, bold=False):
        self.set_font('Amiri', style='B' if bold else '', size=size)

    def fill_box(self, x, y, w, h, fill, border=None, lw=0.25):
        self.set_fill_color(*fill)
        if border:
            self.set_draw_color(*border)
            self.set_line_width(lw)
            self.rect(x, y, w, h, style='FD')
        else:
            self.set_draw_color(*fill)
            self.rect(x, y, w, h, style='F')

    def hline(self, x, y, w, color, lw=0.4):
        self.set_draw_color(*color)
        self.set_line_width(lw)
        self.line(x, y, x + w, y)

    def section_title(self, title, x, cw):
        y = self.get_y()
        # خلفية رمادية داكنة
        self.fill_box(x, y, cw, 9, DEEP_GREY)
        # شريط ذهبي على اليمين
        self.fill_box(x + cw - 3, y, 3, 9, GOLD)
        self.set_xy(x, y)
        self.ar_font(10, True)
        self.set_text_color(*WHITE)
        self.set_fill_color(*DEEP_GREY)
        self.cell(cw, 9, ar(title), border=0, align='R', fill=True,
                  new_x='LMARGIN', new_y='NEXT')
        self.set_text_color(*NEAR_BLACK)
        self.ln(0.5)

    def data_row(self, label, value, x, cw, alt=False):
        lw_col = cw * 0.38
        vw_col = cw * 0.62
        bg = LIGHT_GREY if alt else OFF_WHITE
        y  = self.get_y()
        # خلفية
        self.fill_box(x, y, cw, 8.5, bg, MID_GREY, 0.15)
        # القيمة (يسار)
        self.set_xy(x, y)
        self.ar_font(9.5, False)
        self.set_text_color(*NEAR_BLACK)
        self.set_fill_color(*bg)
        self.cell(vw_col, 8.5, ar(str(value)), border=0, align='R', fill=True,
                  new_x='RIGHT', new_y='TOP')
        # التسمية (يمين)
        self.ar_font(9.5, True)
        self.set_text_color(*DEEP_GREY)
        self.set_fill_color(*bg)
        self.cell(lw_col, 8.5, ar(label + ' :'), border=0, align='R', fill=True,
                  new_x='LMARGIN', new_y='NEXT')
        self.set_text_color(*NEAR_BLACK)

    def total_row(self, label, value, x, cw):
        y = self.get_y()
        self.fill_box(x, y, cw, 10, DEEP_GREY, GOLD, 0.5)
        self.set_xy(x, y)
        self.ar_font(11, True)
        self.set_text_color(*WHITE)
        half = cw / 2
        self.cell(half, 10, ar(str(value)), border=0, align='L', fill=False,
                  new_x='RIGHT', new_y='TOP')
        self.cell(half, 10, ar(label), border=0, align='R', fill=False,
                  new_x='LMARGIN', new_y='NEXT')
        self.set_text_color(*NEAR_BLACK)


def get_currency(country):
    return COUNTRY_DATA.get(country, {}).get('currency', 'عملة')


def generate_pdf(data: dict) -> bytes:
    now        = datetime.now()
    receipt_no = f"ALM-{now.strftime('%Y%m%d%H%M%S')}"
    date_str   = now.strftime('%Y/%m/%d')
    time_str   = now.strftime('%H:%M')

    country   = data.get('seller_country', 'السعودية')
    currency  = get_currency(country)
    price     = float(data.get('account_price', 0) or 0)
    mediation = float(data.get('mediation_amount', 0) or 0)
    total     = price + mediation
    is_gulf   = country in COUNTRY_DATA

    pdf    = AlmeshPDF()
    pdf.add_page()
    W      = pdf.w
    margin = 14
    cw     = W - 2 * margin

    # ══════════════════════════════════════════════════════════════════════
    # الهيدر الرسمي — أبيض ورمادي نقي
    # ══════════════════════════════════════════════════════════════════════
    y0 = pdf.get_y()

    # إطار خارجي للهيدر بالكامل
    hdr_h = 42
    pdf.fill_box(margin, y0, cw, hdr_h, WHITE, MID_GREY, 0.5)

    # شريط رمادي علوي
    pdf.fill_box(margin, y0, cw, 4, DEEP_GREY)
    # خط ذهبي رفيع أسفل الشريط العلوي
    pdf.fill_box(margin, y0 + 4, cw, 0.8, GOLD)

    # لوجو وزارة التجارة فقط في الهيدر (يمين)
    if os.path.exists(MOC_LOGO):
        pdf.image(MOC_LOGO, x=margin + cw - 52, y=y0 + 8, w=48, h=20)

    # عنوان المتجر (وسط)
    pdf.set_xy(margin, y0 + 7)
    pdf.ar_font(16, True)
    pdf.set_text_color(*DEEP_GREY)
    pdf.cell(cw, 8, ar('الميش ستور  |  ALMESH STORE'), align='C',
             new_x='LMARGIN', new_y='NEXT')
    pdf.ar_font(8, False)
    pdf.set_text_color(*DARK_GREY)
    pdf.cell(cw, 4.5, ar('وسيط حسابات الألعاب والتواصل الاجتماعي'), align='C',
             new_x='LMARGIN', new_y='NEXT')
    pdf.ar_font(7, False)
    pdf.set_text_color(120, 120, 120)
    pdf.cell(cw, 4, ar('مؤسسة فهد حمد عبدالله الزومان للتجارة  |  سجل تجاري: 7010964133'), align='C',
             new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)

    # خط ذهبي رفيع قبل الشريط السفلي
    pdf.set_xy(margin, y0 + hdr_h - 4.8)
    pdf.fill_box(margin, y0 + hdr_h - 4.8, cw, 0.8, GOLD)
    # شريط رمادي سفلي
    pdf.fill_box(margin, y0 + hdr_h - 4, cw, 4, DEEP_GREY)
    pdf.set_xy(margin, y0 + hdr_h)
    pdf.ln(5)

    # ══════════════════════════════════════════════════════════════════════
    # شريط رقم الإيصال والتاريخ
    # ══════════════════════════════════════════════════════════════════════
    y_meta = pdf.get_y()
    pdf.fill_box(margin, y_meta, cw, 8, LIGHT_GREY, MID_GREY, 0.3)
    pdf.set_xy(margin, y_meta)
    pdf.ar_font(8.5, True)
    pdf.set_text_color(*DEEP_GREY)
    half = cw / 2
    pdf.cell(half, 8,
             f"{date_str}  |  {time_str}  :  {ar('التاريخ والوقت')}",
             align='L', new_x='RIGHT', new_y='TOP')
    pdf.cell(half, 8,
             f"{receipt_no}  :  {ar('رقم الإيصال')}",
             align='R', new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)
    pdf.ln(4)

    # ══════════════════════════════════════════════════════════════════════
    # القسم 1: معلومات الحساب
    # ══════════════════════════════════════════════════════════════════════
    pdf.section_title('معلومات الحساب', margin, cw)
    pdf.data_row('نوع الحساب',    data.get('account_type', '-'),    margin, cw, False)
    pdf.data_row('تفاصيل الحساب', data.get('account_details', '-'), margin, cw, True)
    pdf.ln(3)

    # ══════════════════════════════════════════════════════════════════════
    # القسم 2: التسعير والوساطة
    # ══════════════════════════════════════════════════════════════════════
    pdf.section_title('التسعير والوساطة', margin, cw)
    pdf.data_row('سعر الحساب',   f"{price:,.2f} {currency}",     margin, cw, False)
    pdf.data_row('مبلغ الوساطة', f"{mediation:,.2f} {currency}", margin, cw, True)
    pdf.total_row('الإجمالي', f"{total:,.2f} {currency}", margin, cw)
    pdf.ln(3)

    # ══════════════════════════════════════════════════════════════════════
    # القسم 3: بيانات البائع
    # ══════════════════════════════════════════════════════════════════════
    pdf.section_title('بيانات البائع', margin, cw)
    pdf.data_row('اسم البائع',       data.get('seller_name', '-'),    margin, cw, False)
    pdf.data_row('البلد',             data.get('seller_country', '-'), margin, cw, True)
    pdf.data_row('رقم الجوال',       data.get('seller_phone', '-'),   margin, cw, False)
    email = data.get('seller_email', '').strip()
    if email:
        pdf.data_row('البريد الإلكتروني', email, margin, cw, True)

    # طريقة استلام الأموال العامة
    gen_pay = data.get('general_payment_method', '').strip()
    if gen_pay:
        pdf.data_row('طريقة استلام الأموال', gen_pay, margin, cw, False)
        binance_id = data.get('binance_id', '').strip()
        if gen_pay == 'بينانس' and binance_id:
            pdf.data_row('Binance ID', binance_id, margin, cw, True)
    pdf.ln(3)

    # ══════════════════════════════════════════════════════════════════════
    # القسم 4: بيانات استلام الأموال
    # ══════════════════════════════════════════════════════════════════════
    pdf.section_title('بيانات استلام الأموال', margin, cw)
    if is_gulf:
        pdf.data_row('اسم البنك',              data.get('bank_name', '-'),                 margin, cw, False)
        pdf.data_row('رقم الآيبان (IBAN)',     data.get('iban', '-').upper(),              margin, cw, True)
        pdf.data_row('طريقة استلام الأموال',  data.get('payment_method', '-'),            margin, cw, False)
    else:
        custom = data.get('custom_payment_details', '-')
        pdf.data_row('طريقة استلام الأموال',  custom, margin, cw, False)
    pdf.ln(4)

    # ══════════════════════════════════════════════════════════════════════
    # القسم 5: بيانات المشتري
    # ══════════════════════════════════════════════════════════════════════
    buyer_name    = data.get('buyer_name', '-')
    buyer_phone   = data.get('buyer_phone', '-')
    buyer_payment = data.get('buyer_payment', '-')
    pdf.section_title('بيانات المشتري', margin, cw)
    pdf.data_row('اسم المشتري',         buyer_name,    margin, cw, False)
    pdf.data_row('رقم الجوال / المعرّف', buyer_phone,   margin, cw, True)
    pdf.data_row('طريقة الدفع',         buyer_payment, margin, cw, False)
    pdf.ln(4)

    # ══════════════════════════════════════════════════════════════════════
    # شروط وأحكام عقد البيع
    # ══════════════════════════════════════════════════════════════════════
    terms_y = pdf.get_y()
    pdf.fill_box(margin, terms_y, cw, 40, (248, 249, 250), (200, 200, 200), 0.4)
    pdf.set_xy(margin + 4, terms_y + 2)
    pdf.ar_font(9, True)
    pdf.set_text_color(13, 92, 46)
    pdf.cell(cw - 8, 7, ar('شروط وأحكام عقد البيع'), align='C', new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)
    terms = [
        'يلتزم البائع بتسليم الحساب المذكور كاملاً وبالمواصفات الموضحة أعلاه.',
        'يلتزم المشتري بسداد المبلغ المتفق عليه كاملاً قبل استلام بيانات الحساب.',
        'تتولى الميش ستور دور الوسيط وتضمن حقوق الطرفين خلال عملية البيع.',
        'لا يحق للبائع استرداد الحساب بعد اكتمال عملية البيع وتسليم المبلغ.',
        'في حال وجود أي نزاع يُرجع إلى الميش ستور للفصل فيه.',
    ]
    for i, term in enumerate(terms, 1):
        pdf.set_xy(margin + 4, pdf.get_y())
        pdf.ar_font(8, False)
        pdf.set_text_color(*DARK_GREY)
        pdf.cell(cw - 8, 6, ar(f'{i}. {term}'), align='R', new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)
    pdf.ln(4)

    # ══════════════════════════════════════════════════════════════════════
    # خانات التوقيع
    # ══════════════════════════════════════════════════════════════════════
    sig_y = pdf.get_y()
    sig_w = (cw - 8) / 3
    sig_h = 22
    sig_labels = [ar('توقيع البائع'), ar('توقيع المشتري'), ar('ختم الوسيط')]
    sig_names  = [ar(data.get('seller_name', '')), ar(data.get('buyer_name', '')), ar('الميش ستور')]
    for i in range(3):
        sx = margin + i * (sig_w + 4)
        pdf.fill_box(sx, sig_y, sig_w, sig_h, WHITE, MID_GREY, 0.4)
        pdf.set_xy(sx, sig_y + 2)
        pdf.ar_font(8, True)
        pdf.set_text_color(*DARK_GREY)
        pdf.cell(sig_w, 6, sig_labels[i], align='C', new_x='LMARGIN', new_y='NEXT')
        pdf.set_xy(sx, sig_y + sig_h - 6)
        pdf.ar_font(7.5, False)
        pdf.set_text_color(*NEAR_BLACK)
        pdf.cell(sig_w, 5, sig_names[i], align='C', new_x='LMARGIN', new_y='NEXT')
    pdf.set_y(sig_y + sig_h + 4)

    # ══════════════════════════════════════════════════════════════════════
    # خط فاصل ذهبي
    # ══════════════════════════════════════════════════════════════════════
    pdf.hline(margin, pdf.get_y(), cw, GOLD, 0.8)
    pdf.ln(4)

    # ══════════════════════════════════════════════════════════════════════
    # بيانات الوسيط - الميش ستور
    # ══════════════════════════════════════════════════════════════════════
    # إطار خارجي لقسم الوسيط
    broker_box_y = pdf.get_y()
    broker_box_h = 64
    pdf.fill_box(margin, broker_box_y, cw, broker_box_h, WHITE, MID_GREY, 0.5)

    # هيدر بيانات الوسيط
    y_brok = broker_box_y
    pdf.fill_box(margin, y_brok, cw, 9, DEEP_GREY)
    # شريط ذهبي على الجانبين
    pdf.fill_box(margin, y_brok, 3, 9, GOLD)
    pdf.fill_box(margin + cw - 3, y_brok, 3, 9, GOLD)
    pdf.set_xy(margin, y_brok)
    pdf.ar_font(10, True)
    pdf.set_text_color(*WHITE)
    pdf.cell(cw, 9, ar('بيانات الوسيط  —  الميش ستور'), align='C',
             new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)
    pdf.ln(1)

    broker_start_y = pdf.get_y()

    # لوجو وزارة التجارة في قسم الوسيط (يمين)
    if os.path.exists(MOC_LOGO):
        pdf.image(MOC_LOGO, x=margin + cw - 52, y=broker_start_y + 1, w=48, h=18)

    # شبكة بيانات الوسيط - 4 أعمدة
    col = cw / 4
    broker_rows = [
        [ar('الاسم :'),         ar('فهد عبدالله الزومان'),
         ar('السجل التجاري :'), '7010964133'],
        [ar('المنطقة :'),       ar('الشرقية - المملكة العربية السعودية'),
         ar('البنك :'),         ar('بنك الأنماء')],
        [ar('المؤسسة :'),       ar('مؤسسة فهد عبدالله الزومان للتجارة'),
         ar('رقم الحساب :'),    '68205358197000'],
        ['IBAN :',               'SA1505000068205358197000',
         'Name :',               'Fahad Abdullah Alzu'],
        [ar('توثيق معروف :'),   '372399',
         ar('رقم الآيبان :'),   'SA1505000068205358197000'],
    ]
    for i, row in enumerate(broker_rows):
        y_r = pdf.get_y()
        if i > 0:
            pdf.hline(margin + 2, y_r, cw - 4, LIGHT_GREY, 0.3)
        pdf.set_xy(margin, y_r)
        for j, cell_txt in enumerate(row):
            is_label = (j % 2 == 0)
            pdf.ar_font(8, is_label)
            pdf.set_text_color(*(DEEP_GREY if is_label else NEAR_BLACK))
            pdf.set_fill_color(*WHITE)
            pdf.cell(col, 9, cell_txt, align='C', fill=True,
                     new_x='RIGHT', new_y='TOP')
        pdf.set_xy(margin, y_r + 9)
    pdf.set_text_color(*NEAR_BLACK)

    pdf.ln(1)
    # خط ذهبي فاصل
    pdf.hline(margin + 2, pdf.get_y(), cw - 4, GOLD, 0.5)
    pdf.ln(2)

    # نص التوثيق الرسمي
    pdf.ar_font(7.5, True)
    pdf.set_text_color(*DARK_GREY)
    pdf.cell(cw, 5,
             ar('موثق ومسجل لدى وزارة التجارة السعودية  |  سجل تجاري: 7010964133  |  رقم توثيق معروف: 372399'),
             align='C', new_x='LMARGIN', new_y='NEXT')
    pdf.set_text_color(*NEAR_BLACK)
    pdf.ln(3)

    # ══════════════════════════════════════════════════════════════════════
    # تذييل رسمي
    # ══════════════════════════════════════════════════════════════════════
    pdf.hline(margin, pdf.get_y(), cw, GOLD, 0.8)
    pdf.ln(1.5)
    pdf.fill_box(margin, pdf.get_y(), cw, 3.5, DEEP_GREY)
    pdf.ln(1)
    pdf.ar_font(7.5, False)
    pdf.set_text_color(*DARK_GREY)
    pdf.cell(cw, 5,
             ar(f'إيصال رسمي صادر من الميش ستور  |  رقم: {receipt_no}  |  {date_str}'),
             align='C', new_x='LMARGIN', new_y='NEXT')
    pdf.cell(cw, 4.5,
             ar('جميع الحقوق محفوظة — مؤسسة فهد حمد عبدالله الزومان للتجارة'),
             align='C', new_x='LMARGIN', new_y='NEXT')

    return bytes(pdf.output())


# ── Routes ────────────────────────────────────────────────────────────────────
@app.route('/api/country_data/<country>')
def country_data(country):
    from urllib.parse import unquote
    country = unquote(country)
    if country in COUNTRY_DATA:
        return jsonify({
            'type': 'gulf',
            'banks': COUNTRY_DATA[country]['banks'],
            'payment_methods': COUNTRY_DATA[country]['payment_methods'],
            'currency': COUNTRY_DATA[country]['currency'],
            'iban_prefix': COUNTRY_DATA[country]['iban_prefix'],
            'phone_code': COUNTRY_DATA[country]['phone_code'],
        })
    else:
        return jsonify({
            'type': 'non_gulf',
            'phone_code': PHONE_CODES.get(country, ''),
            'currency': 'عملة',
        })


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/generate_pdf', methods=['POST'])
def generate_pdf_route():
    try:
        data = request.get_json()
        if not data:
            return jsonify({'error': 'لم يتم إرسال بيانات'}), 400

        country = data.get('seller_country', '')
        is_gulf = country in COUNTRY_DATA

        required = ['account_type', 'account_details', 'account_price',
                    'mediation_amount', 'seller_name', 'seller_country', 'seller_phone',
                    'general_payment_method']

        for f in required:
            if not data.get(f):
                return jsonify({'error': f'الحقل مطلوب: {f}'}), 400

        # إذا كانت دولة خليجية واختار تحويل بنكي: تحقق من بيانات البنك
        if is_gulf and data.get('general_payment_method') == 'تحويل بنكي':
            if not data.get('bank_name'):
                return jsonify({'error': 'يرجى اختيار البنك'}), 400
            if not data.get('iban'):
                return jsonify({'error': 'يرجى إدخال رقم الآيبان'}), 400

        if not is_gulf and not data.get('custom_payment_details', '').strip():
            return jsonify({'error': 'يرجى كتابة طريقة استلام الأموال'}), 400

        pdf_bytes = generate_pdf(data)
        fname = f"almesh_receipt_{datetime.now().strftime('%Y%m%d_%H%M%S')}.pdf"
        return send_file(
            io.BytesIO(pdf_bytes),
            mimetype='application/pdf',
            as_attachment=True,
            download_name=fname,
        )
    except Exception as e:
        import traceback; traceback.print_exc()
        return jsonify({'error': str(e)}), 500


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)
