<?php

declare(strict_types=1);

namespace App\Core;

final class SchemaManifest
{
    public static function all(): array
    {
        return [
            [
                'key' => 'app_settings_schema',
                'migration' => 'sql/migrate_v1_16_app_settings.sql',
                'module' => 'system',
                'description' => 'إعدادات التطبيق العامة.',
            ],
            [
                'key' => 'expenses_schema',
                'migration' => 'sql/migrate_v1_17_expenses.sql',
                'module' => 'finance',
                'description' => 'جداول المصروفات وبنودها.',
            ],
            [
                'key' => 'parties_schema',
                'migration' => 'sql/migrate_v1_18_parties.sql',
                'module' => 'parties',
                'description' => 'التحول إلى parties كمصدر موحد.',
            ],
            [
                'key' => 'parties_migration_bridge',
                'migration' => 'sql/migrate_v1_18_parties.sql',
                'module' => 'parties',
                'description' => 'جسر التوافق بين customers/suppliers و parties.',
            ],
            [
                'key' => 'sales_invoices_party_schema',
                'migration' => 'sql/migrate_v1_19_parties_links.sql',
                'module' => 'sales',
                'description' => 'ربط فواتير المبيعات بالأطراف.',
            ],
            [
                'key' => 'purchase_invoices_party_schema',
                'migration' => 'sql/migrate_v1_19_parties_links.sql',
                'module' => 'purchases',
                'description' => 'ربط فواتير الشراء بالأطراف.',
            ],
            [
                'key' => 'party_ledger_schema',
                'migration' => 'sql/migrate_v1_20_party_ledger.sql',
                'module' => 'parties',
                'description' => 'دفتر حركة الأطراف.',
            ],
            [
                'key' => 'bank_accounts_schema',
                'migration' => 'sql/migrate_v1_21_bank_accounts.sql',
                'module' => 'finance',
                'description' => 'الحسابات البنكية.',
            ],
            [
                'key' => 'cash_payments_schema',
                'migration' => 'sql/migrate_v1_22_cash_payments.sql',
                'module' => 'finance',
                'description' => 'سندات الصرف النقدية.',
            ],
            [
                'key' => 'purchase_invoice_payment_schema',
                'migration' => 'sql/migrate_v1_23_purchases.sql',
                'module' => 'purchases',
                'description' => 'مدفوعات فواتير الشراء.',
            ],
            [
                'key' => 'quotations_schema',
                'migration' => 'sql/migrate_v1_26_quotations.sql',
                'module' => 'sales',
                'description' => 'عروض الأسعار.',
            ],
            [
                'key' => 'cashboxes_schema',
                'migration' => 'sql/migrate_v1_27_cashboxes.sql',
                'module' => 'finance',
                'description' => 'الخزن وحركاتها.',
            ],
            [
                'key' => 'users_cashbox_schema',
                'migration' => 'sql/migrate_v1_28_users_cashbox.sql',
                'module' => 'admin',
                'description' => 'ربط المستخدمين بالخزن.',
            ],
            [
                'key' => 'sales_invoice_payment_schema',
                'migration' => 'sql/migrate_v1_31_sales_invoice_payment.sql',
                'module' => 'sales',
                'description' => 'مدفوعات فواتير البيع.',
            ],
            [
                'key' => 'checks_schema',
                'migration' => 'sql/migrate_v1_32_checks.sql',
                'module' => 'finance',
                'description' => 'الشيكات والتنبيهات المتعلقة بها.',
            ],
        ];
    }

    public static function byKey(): array
    {
        $indexed = [];
        foreach (self::all() as $item) {
            $indexed[$item['key']] = $item;
        }

        return $indexed;
    }
}
