import { getSession } from '@/lib/auth';
import { hasEmployeePermission } from '@/lib/employee-permissions';
import { pgGetSettings, pgGetChartOfAccounts, pgGetItemGroups } from '@/lib/postgres/data-access';
import { pgListRecurringExpenseTemplates } from '@/lib/postgres/expense-recurring';
import { redirect } from 'next/navigation';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { ExpenseContractManager } from '@/components/admin/expense-contract-manager';
import { ExpenseSchedulerDashboard } from '@/components/admin/expense-scheduler-dashboard';

export default async function RecurringExpensesAdvancedPage() {
  const session = await getSession();
  const settings = await pgGetSettings();

  // Authorization check
  if (
    !session?.user ||
    (!hasEmployeePermission(session.user, settings, 'admin.accounting') &&
      !hasEmployeePermission(session.user, settings, 'admin.expense-recurring'))
  ) {
    redirect('/login');
  }

  // Fetch data
  const [templatesResult, chartAccountsResult, itemGroupsResult] = await Promise.all([
    pgListRecurringExpenseTemplates({ pageSize: 500 }),
    pgGetChartOfAccounts(),
    pgGetItemGroups(),
  ]);

  const templates = templatesResult?.items || [];
  const chartAccounts = Array.isArray((chartAccountsResult as any)?.items)
    ? (chartAccountsResult as any).items
    : (chartAccountsResult as any) || [];
  const itemGroups = Array.isArray((itemGroupsResult as any)?.items)
    ? (itemGroupsResult as any).items
    : (itemGroupsResult as any) || [];

  return (
    <div className="space-y-6">
      <div>
        <h1 className="text-4xl font-bold tracking-tight">المصاريف الدورية - المحرك المتقدم</h1>
        <p className="text-muted-foreground mt-1">
          إدارة العقود والالتزامات والقيود والتوزيعات وجداول الدفع
        </p>
      </div>

      <Tabs defaultValue="contracts" className="w-full">
        <TabsList>
          <TabsTrigger value="contracts">العقود والالتزامات</TabsTrigger>
          <TabsTrigger value="scheduler">المجدول الخلفي</TabsTrigger>
          <TabsTrigger value="documentation">التوثيق</TabsTrigger>
        </TabsList>

        {/* Contracts & Obligations Tab */}
        <TabsContent value="contracts" className="space-y-6">
          <ExpenseContractManager templates={templates} chartAccounts={chartAccounts} />
        </TabsContent>

        <TabsContent value="scheduler" className="space-y-6">
          <ExpenseSchedulerDashboard templates={templates} />
        </TabsContent>

        {/* Documentation Tab */}
        <TabsContent value="documentation" className="space-y-6">
          <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
            {/* Architecture Overview */}
            <div className="rounded-lg border bg-card text-card-foreground shadow-sm p-6">
              <h2 className="text-2xl font-semibold mb-4">البنية المعمارية</h2>
              <div className="space-y-4 text-sm">
                <div>
                  <h3 className="font-semibold mb-2">1️⃣ طبقة العقود</h3>
                  <p className="text-muted-foreground">
                    ربط المصاريف الدورية بالعقود الرسمية مع شروط التجديد والتصعيد والتخصيص.
                  </p>
                </div>
                <div>
                  <h3 className="font-semibold mb-2">2️⃣ جدولة الإنشاء</h3>
                  <p className="text-muted-foreground">
                    محرك يولد المستندات تلقائياً في التواريخ المحددة مع حماية ضد التكرار.
                  </p>
                </div>
                <div>
                  <h3 className="font-semibold mb-2">3️⃣ الالتزامات المالية</h3>
                  <p className="text-muted-foreground">
                    معالجة ثلاثة أساليب محاسبية: نقدي (Cash) واستحقاق (Accrual) ومقدم (Prepaid).
                  </p>
                </div>
                <div>
                  <h3 className="font-semibold mb-2">4️⃣ القيود المحاسبية</h3>
                  <p className="text-muted-foreground">
                    إنشاء قيود تلقائية مع ميزان تحقق، وقدرات عكس، وارتباط بقيد يومية مركزية.
                  </p>
                </div>
                <div>
                  <h3 className="font-semibold mb-2">5️⃣ التوزيعات والتخصيص</h3>
                  <p className="text-muted-foreground">
                    توزيع المصروف على فروع ومراكز تكلفة ومشاريع مع حساب النسب والمبالغ.
                  </p>
                </div>
                <div>
                  <h3 className="font-semibold mb-2">6️⃣ جداول الدفع</h3>
                  <p className="text-muted-foreground">
                    فصل الالتزام عن جدول الدفع (مثال: فاتورة سنوية لكن دفع شهري).
                  </p>
                </div>
              </div>
            </div>

            {/* Accounting Bases */}
            <div className="rounded-lg border bg-card text-card-foreground shadow-sm p-6">
              <h2 className="text-2xl font-semibold mb-4">أساليب المحاسبة</h2>
              <div className="space-y-4">
                {/* Cash Basis */}
                <div className="border-l-4 border-blue-500 pl-4">
                  <h3 className="font-semibold">أساس نقدي (Cash)</h3>
                  <p className="text-sm text-muted-foreground mt-1">
                    تسجيل المصروف فقط عند الدفع الفعلي. مثالي للمشتريات الفورية.
                  </p>
                  <code className="text-xs bg-muted p-1 rounded mt-2 block">
                    مثال: مصروف إعلان = يُسجل عند الدفع
                  </code>
                </div>

                {/* Accrual Basis */}
                <div className="border-l-4 border-green-500 pl-4">
                  <h3 className="font-semibold">أساس الاستحقاق (Accrual)</h3>
                  <p className="text-sm text-muted-foreground mt-1">
                    تسجيل المصروف عند الالتزام به، بغض النظر عن توقيت الدفع. IFRS Standard.
                  </p>
                  <code className="text-xs bg-muted p-1 rounded mt-2 block">
                    مثال: إيجار شهري = يُسجل من 1-30 حتى لو دفع في 15
                  </code>
                </div>

                {/* Prepaid Basis */}
                <div className="border-l-4 border-amber-500 pl-4">
                  <h3 className="font-semibold">مصروف مقدم (Prepaid)</h3>
                  <p className="text-sm text-muted-foreground mt-1">
                    دفع مقدم يتم توزيعه على فترات لاحقة.
                  </p>
                  <code className="text-xs bg-muted p-1 rounded mt-2 block">
                    مثال: إيجار سنوي 12,000 = دفع مقدم + توزيع شهري 1,000
                  </code>
                </div>
              </div>
            </div>

            {/* Workflow */}
            <div className="rounded-lg border bg-card text-card-foreground shadow-sm p-6">
              <h2 className="text-2xl font-semibold mb-4">سير العمل</h2>
              <div className="space-y-3">
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">1</span>
                  <div>
                    <p className="font-semibold">إنشاء عقد</p>
                    <p className="text-xs text-muted-foreground">تحديد الشروط والتصعيد والتجديد</p>
                  </div>
                </div>
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">2</span>
                  <div>
                    <p className="font-semibold">ربط القالب</p>
                    <p className="text-xs text-muted-foreground">ربط قالب مصروف دوري بالعقد</p>
                  </div>
                </div>
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">3</span>
                  <div>
                    <p className="font-semibold">توليد الالتزام</p>
                    <p className="text-xs text-muted-foreground">إنشاء التزام مالي مع أساس محاسبي</p>
                  </div>
                </div>
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">4</span>
                  <div>
                    <p className="font-semibold">التوزيع (اختياري)</p>
                    <p className="text-xs text-muted-foreground">توزيع على فروع/مراكز تكلفة</p>
                  </div>
                </div>
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">5</span>
                  <div>
                    <p className="font-semibold">جدول الدفع</p>
                    <p className="text-xs text-muted-foreground">تحديد متى وكيف يتم الدفع</p>
                  </div>
                </div>
                <div className="flex gap-3">
                  <span className="flex items-center justify-center w-6 h-6 rounded-full bg-primary text-white text-xs font-bold">6</span>
                  <div>
                    <p className="font-semibold">القيود المحاسبية</p>
                    <p className="text-xs text-muted-foreground">ترحيل تلقائي للقيود</p>
                  </div>
                </div>
              </div>
            </div>

            {/* Key Features */}
            <div className="rounded-lg border bg-card text-card-foreground shadow-sm p-6">
              <h2 className="text-2xl font-semibold mb-4">المميزات الرئيسية</h2>
              <ul className="space-y-2 text-sm">
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>فصل كامل بين القالب والقيد والدفعة</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>دعم 3 أساليب محاسبة (نقدي/استحقاق/مقدم)</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>توزيع على عدة مراكز تكلفة</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>جداول دفع منفصلة عن الالتزام</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>قيود محاسبية مع ميزان تحقق</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>سجل تدقيق شامل لكل عملية</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>حماية ضد التوليد المزدوج</span>
                </li>
                <li className="flex gap-2">
                  <span className="text-green-600">✓</span>
                  <span>قابل للتوسع للمرحلتين 2 و 3</span>
                </li>
              </ul>
            </div>
          </div>
        </TabsContent>
      </Tabs>
    </div>
  );
}
