(() => {
const { PageHeader, SummaryStrip, DataTable, Money, StatusBadge, Button, SearchField, Select, Tabs, Alert, StateView } = window.AmlakPlusDesignSystem_b3aa85;

// Shared list helpers for all secondary screens.
const Acts = ({ children }) => <div className="kit-acts" onClick={(e) => e.stopPropagation()}>{children}</div>;
const match = (q, ...xs) => !q || xs.join(' ').includes(q);
function Toolbar({ q, setQ, ph, children }) { return <div className="kit-toolbar"><SearchField value={q} onChange={setQ} placeholder={ph} style={{ flex: '1 1 260px', maxWidth: 420 }} />{children}</div>; }
const Empty = ({ onClear }) => <StateView kind="noResults" boxed actions={onClear && <Button variant="secondary" onClick={onClear}>مسح البحث</Button>} />;
const cellTwo = (a, b) => <><span className="ap-cell-strong">{a}</span>{b && <small>{b}</small>}</>;
const num = (n) => <bdi className="ap-num">{n}</bdi>;
const upd = (setRows, id, patch) => setRows((rs) => rs.map((r) => (r.id === id ? { ...r, ...patch } : r)));

function CollectionScreen({ openPayment, openReceipt }) {
  const D = window.AP_DATA;
  const [rows, setRows] = React.useState(D.payments);
  const [tab, setTab] = React.useState('all');
  const [q, setQ] = React.useState('');
  const [method, setMethod] = React.useState('');
  const list = rows.filter((r) => (tab === 'all' || r.status === tab) && (!method || r.method === method) && match(q, r.tenant, r.where, r.receipt, r.ref));
  const sum = (st) => rows.filter((r) => r.status === st).reduce((s, r) => s + r.amount, 0);
  const cnt = (st) => rows.filter((r) => r.status === st).length;
  const receiptOf = (r) => ({ ...r, recipientLabel: r.to, preview: { rows: [{ period: 'سبتمبر 2026', take: r.amount, after: 0 }] } });
  return (
    <>
      <PageHeader title="التحصيل والسندات" description="كل الدفعات المسجلة وحالتها وسنداتها. الدفعة لا تُخصم حتى تتأكد."
        actions={<><Button variant="secondary" icon="Download" onClick={() => window.apOpen('report', window.AP_DATA.reports[1])}>تقرير التحصيل</Button><Button icon="Banknote" onClick={openPayment}>تسجيل دفعة</Button></>} />
      <SummaryStrip items={[
        { key: 'confirmed', label: 'مؤكد في سبتمبر', amount: sum('confirmed'), tone: 'success', note: cnt('confirmed') + ' سندات · يشمل المحول للمالك', onClick: () => setTab(tab === 'confirmed' ? 'all' : 'confirmed'), selected: tab === 'confirmed' },
        { key: 'pending', label: 'بانتظار التحقق', amount: sum('pending'), tone: 'warning', note: cnt('pending') + ' دفعات · لا تُخصم بعد', onClick: () => setTab(tab === 'pending' ? 'all' : 'pending'), selected: tab === 'pending' },
        { key: 'reversed', label: 'معكوس', amount: sum('reversed'), tone: 'neutral', note: 'محفوظ للأثر', onClick: () => setTab(tab === 'reversed' ? 'all' : 'reversed'), selected: tab === 'reversed' }
      ]} />
      <Tabs style={{ marginTop: 18 }} label="حالة الدفعات" value={tab} onChange={setTab} tabs={[{ id: 'all', label: 'الكل', count: rows.length }, { id: 'pending', label: 'بانتظار التحقق', count: cnt('pending') }, { id: 'confirmed', label: 'مؤكدة', count: cnt('confirmed') }, { id: 'reversed', label: 'معكوسة', count: cnt('reversed') }]} />
      <div style={{ marginTop: 14 }}>
        <Toolbar q={q} setQ={setQ} ph="المستأجر أو رقم السند أو المرجع"><Select value={method} onChange={(e) => setMethod(e.target.value)} placeholder="كل الطرق" options={['نقدًا', 'تحويل بنكي']} /></Toolbar>
        {!list.length ? <Empty onClear={() => { setQ(''); setMethod(''); setTab('all'); }} /> : <DataTable caption="الدفعات" rows={list} columns={[
          { key: 'date', header: 'التاريخ', render: (r) => num(r.date) },
          { key: 'tenant', header: 'المستأجر', render: (r) => cellTwo(r.tenant, r.where) },
          { key: 'amount', header: 'المبلغ', numeric: true, render: (r) => <Money value={r.amount} struck={r.status === 'reversed'} /> },
          { key: 'method', header: 'الطريقة وجهة الاستلام', render: (r) => <>{r.method}<small>{r.to}</small></> },
          { key: 'status', header: 'الحالة', render: (r) => <><StatusBadge size="sm" status={r.status} />{r.note && <small>{r.note}</small>}</> },
          { key: 'rc', header: 'السند', render: (r) => r.receipt ? num(r.receipt) : '—' },
          { key: 'a', header: <span className="ap-sr-only">إجراءات</span>, render: (r) => <Acts>
            {r.status === 'pending' && <Button size="sm" variant="secondary" icon="ShieldCheck" onClick={() => window.apOpen('verify', { ...r, subtitle: r.tenant + ' · ' + r.where, onSaved: (v) => upd(setRows, r.id, v.decision === 'reject' ? { status: 'rejected', note: v.reason } : { status: 'confirmed', receipt: '000143' }) })}>مراجعة</Button>}
            {r.status === 'confirmed' && <><Button size="sm" variant="secondary" icon="Printer" onClick={() => openReceipt(receiptOf(r))}>السند</Button><Button size="sm" variant="ghost" iconOnly icon="Undo2" label="عكس الدفعة" onClick={() => window.apOpen('reverse', { ...r, subtitle: r.tenant + ' · سند ' + r.receipt, onSaved: (v) => upd(setRows, r.id, { status: 'reversed', note: 'عُكست — ' + v.reason }) })} /></>}
          </Acts> }
        ]} />}
        <p className="kit-scope">«مؤكد» يشمل التحويل المباشر لحساب المالك (يظهر في عمود جهة الاستلام) لكنه لا يدخل صندوق المكتب.</p>
      </div>
    </>
  );
}

const MSTATUS = { draft: ['draft', 'جديد'], awaitingApproval: ['awaitingApproval', 'بانتظار موافقة المالك'], approved: ['approved', 'قيد التنفيذ'], paid: ['paid', 'مكتمل'], rejected: ['rejected', 'مرفوض / مؤجل'] };
const MFROM = { 'بانتظار موافقة المالك': 'awaitingApproval', 'معتمد — قيد التنفيذ': 'approved', 'مكتمل': 'paid', 'مرفوض / مؤجل': 'rejected' };
function MaintenanceScreen() {
  const D = window.AP_DATA;
  const [rows, setRows] = React.useState(D.maintenance);
  const [st, setSt] = React.useState('open');
  const [q, setQ] = React.useState('');
  const open = (r) => !['paid', 'rejected'].includes(r.status);
  const list = rows.filter((r) => (st === 'all' || (st === 'open' ? open(r) : !open(r))) && match(q, r.id, r.title, r.property, r.unit));
  return (
    <>
      <PageHeader title="طلبات الصيانة" description="من البلاغ إلى الموافقة والتنفيذ؛ التكلفة الفعلية تتحول لمصروف على المالك." actions={<Button icon="Plus" onClick={() => window.apOpen('maintenance', { onSaved: (v) => setRows((rs) => [{ id: 'MR-0413', date: '23/09/2026', property: (D.properties.find((p) => p.id === v.property) || {}).name, unit: v.unit, title: v.title, cat: v.cat, priority: v.priority, status: 'draft', assignee: v.assignee, estimate: Number(v.estimate) || 0, by: v.source }, ...rs]) })}>طلب صيانة</Button>} />
      <SummaryStrip items={[
        { label: 'مفتوحة', value: rows.filter(open).length, tone: 'warning', note: rows.filter((r) => r.priority === 'عاجل' && open(r)).length + ' عاجل' },
        { label: 'بانتظار موافقة المالك', value: rows.filter((r) => r.status === 'awaitingApproval').length, tone: 'info', note: 'فوق حد الاتفاق' },
        { label: 'تكلفة تقديرية مفتوحة', amount: rows.filter(open).reduce((s, r) => s + r.estimate, 0), tone: 'neutral', note: 'ليست مصروفًا بعد' }
      ]} />
      <div style={{ marginTop: 14 }}>
        <Toolbar q={q} setQ={setQ} ph="رقم الطلب أو العقار أو الوصف"><Select value={st} onChange={(e) => setSt(e.target.value)} options={[{ value: 'open', label: 'المفتوحة' }, { value: 'closed', label: 'المغلقة' }, { value: 'all', label: 'الكل' }]} /></Toolbar>
        {!list.length ? <Empty onClear={() => setQ('')} /> : <DataTable caption="طلبات الصيانة" rows={list} columns={[
          { key: 'id', header: 'الطلب', render: (r) => cellTwo(<bdi className="ap-ltr">{r.id}</bdi>, r.date) },
          { key: 'where', header: 'العقار / الموقع', render: (r) => cellTwo(r.property, r.unit) },
          { key: 'title', header: 'المشكلة', wrap: true, render: (r) => <>{r.title}<small>{r.cat} · {r.by}</small></> },
          { key: 'p', header: 'الأولوية', render: (r) => r.priority === 'عاجل' ? <StatusBadge size="sm" tone="danger" icon="TriangleAlert" label="عاجل" /> : <span style={{ color: 'var(--text-3)' }}>عادي</span> },
          { key: 'as', header: 'المنفذ', render: (r) => r.assignee },
          { key: 'est', header: 'التكلفة', numeric: true, render: (r) => r.cost ? <><Money value={r.cost} /><small>فعلية</small></> : <><Money value={r.estimate} tone="muted" /><small>تقديرية</small></> },
          { key: 'st', header: 'الحالة', render: (r) => <><StatusBadge size="sm" status={MSTATUS[r.status][0]} label={MSTATUS[r.status][1]} />{r.note && <small>{r.note}</small>}</> },
          { key: 'a', header: <span className="ap-sr-only">إجراءات</span>, render: (r) => <Acts>{open(r) && <Button size="sm" variant="secondary" icon="Pencil" onClick={() => window.apOpen('maintUpdate', { ...r, onSaved: (v) => upd(setRows, r.id, { status: MFROM[v.status], assignee: v.assignee, cost: Number(v.cost) || r.cost }) })}>تحديث</Button>}
            {r.status === 'paid' && <Button size="sm" variant="ghost" icon="Wallet" onClick={() => window.apOpen('expense', { ...r, cat: 'صيانة' })}>المصروف</Button>}</Acts> }
        ]} />}
      </div>
    </>
  );
}

function EjarScreen() {
  const D = window.AP_DATA;
  const [rows, setRows] = React.useState(D.ejar);
  const [done, setDone] = React.useState([]);
  const unlinked = D.leases.filter((l) => l.status !== 'ended' && l.ejar !== 'مسجل');
  const CONF = { high: ['success', 'تطابق قوي'], medium: ['warning', 'تطابق محتمل'], none: ['danger', 'بدون تطابق'] };
  return (
    <>
      <PageHeader title="مطابقة إيجار" description="مدفوعات منصة إيجار تُطابق يدويًا مع العقود قبل أن تُسجل. لا شيء يُخصم تلقائيًا."
        actions={<Button icon="Upload" onClick={() => window.apOpen('ejarImport')}>استيراد من إيجار</Button>} />
      <SummaryStrip items={[
        { label: 'بانتظار المطابقة', amount: rows.reduce((s, r) => s + r.amount, 0), tone: 'warning', note: rows.length + ' عمليات' },
        { label: 'طوبقت اليوم', amount: done.reduce((s, r) => s + r.amount, 0), tone: 'success', note: done.length + ' عمليات' },
        { label: 'عقود غير موثقة', value: unlinked.length, tone: 'info', note: 'بلا رقم عقد إيجار' }
      ]} />
      <div style={{ marginTop: 16 }}>{window.EjarDueLeases && <window.EjarDueLeases />}</div>
      <section className="kit-group">
        <header><h2>عمليات بانتظار المطابقة<span className="kit-count">{rows.length}</span></h2><p>آخر استيراد: 22/09/2026 — منيرة القحطاني</p></header>
        {!rows.length ? <StateView kind="empty" icon="CircleCheck" title="لا عمليات بانتظار المطابقة" text="كل ما استُورد طوبق أو سُجل." /> : <DataTable caption="عمليات إيجار" rows={rows} columns={[
          { key: 'date', header: 'التاريخ', render: (r) => num(r.date) },
          { key: 'ref', header: 'مرجع إيجار', render: (r) => cellTwo(<bdi className="ap-ltr">{r.ejarRef}</bdi>, 'عقد ' + r.contract) },
          { key: 'payer', header: 'الدافع', render: (r) => r.payer },
          { key: 'amount', header: 'المبلغ', numeric: true, render: (r) => <Money value={r.amount} /> },
          { key: 'm', header: 'المقترح', render: (r) => { const l = D.leases.find((x) => x.id === r.match); return <>{l ? l.tenant + ' — ' + l.unit : '—'}<small><StatusBadge size="sm" tone={CONF[r.conf][0]} showIcon={false} label={CONF[r.conf][1]} /></small></>; } },
          { key: 'a', header: '', render: (r) => <Acts><Button size="sm" variant={r.match ? 'primary' : 'secondary'} icon="FileCheck" onClick={() => window.apOpen('ejarMatch', { ...r, onSaved: () => { setRows((rs) => rs.filter((x) => x.id !== r.id)); setDone((d) => [...d, r]); } })}>{r.match ? 'مطابقة' : 'بحث وربط'}</Button></Acts> }
        ]} />}
      </section>
      <section className="kit-group">
        <header><h2>عقود بلا رقم إيجار<span className="kit-count">{unlinked.length}</span></h2><p>أضف رقم العقد ليسهل مطابقة مدفوعاته.</p></header>
        <DataTable caption="عقود غير موثقة" rows={unlinked} columns={[
          { key: 't', header: 'المستأجر', render: (l) => cellTwo(l.tenant, l.property + ' / ' + l.unit) },
          { key: 'e', header: 'الحالة في إيجار', render: (l) => l.ejar },
          { key: 's', header: 'بداية العقد', render: (l) => num(l.start) },
          { key: 'a', header: '', render: (l) => <Acts><Button size="sm" variant="secondary" icon="Pencil" onClick={() => window.apOpen('ejarLink', { tenant: l.tenant, property: l.property, unit: l.unit })}>إضافة رقم إيجار</Button></Acts> }
        ]} />
      </section>
    </>
  );
}

window.AP_FORMS.ejarLink = { title: 'ربط العقد برقم إيجار', sub: (c) => c && (c.tenant + ' · ' + c.property + ' / ' + c.unit), width: 520, fields: [
  { k: 'no', l: 'رقم عقد إيجار', t: 'ltr', req: true, ph: '201XXXXXXXX' },
  { k: 'date', l: 'تاريخ التوثيق', t: 'date', def: '2026-09-23' },
  { k: 'file', l: 'نسخة العقد الموثق', t: 'file', opt: true }
], submit: 'حفظ الرقم', done: { title: 'رُبط العقد', text: 'ستُقترح مدفوعات إيجار لهذا العقد تلقائيًا عند الاستيراد.' } };

Object.assign(window, { CollectionScreen, MaintenanceScreen, EjarScreen, APList: { Acts, match, Toolbar, Empty, cellTwo, num, upd } });
})();
