<?php
// app/Models/DocumentTemplate.php
// إدارة قوالب أنواع الوثائق (يديرها المدير)

class DocumentTemplate {

    /** كل القوالب (مع إمكانية التصفية حسب النطاق وحالة التفعيل) */
    public static function all(?string $scope = null, bool $activeOnly = false): array {
        $sql = 'SELECT * FROM document_templates WHERE 1=1';
        $p = [];
        if ($scope)     { $sql .= ' AND scope=?';   $p[] = $scope; }
        if ($activeOnly){ $sql .= ' AND is_active=1'; }
        $sql .= ' ORDER BY sort_order ASC, id ASC';
        $s = db()->prepare($sql); $s->execute($p);
        return $s->fetchAll();
    }

    /** القوالب المفعّلة فقط ضمن نطاق معيّن (vehicle / driver) */
    public static function active(?string $scope = null): array {
        return self::all($scope, true);
    }

    public static function find(int $id): ?array {
        $s = db()->prepare('SELECT * FROM document_templates WHERE id=?');
        $s->execute([$id]);
        return $s->fetch() ?: null;
    }

    public static function findByCode(string $code): ?array {
        $s = db()->prepare('SELECT * FROM document_templates WHERE code=?');
        $s->execute([$code]);
        return $s->fetch() ?: null;
    }

    public static function create(array $d): int {
        $s = db()->prepare(
            'INSERT INTO document_templates
             (code,name_ar,name_en,name_fr,icon,scope,requires_expiry,is_active,sort_order,created_by)
             VALUES (?,?,?,?,?,?,?,?,?,?)'
        );
        $s->execute([
            $d['code'], $d['name_ar'], $d['name_en'], $d['name_fr'],
            $d['icon'] ?: '📄', $d['scope'],
            (int)($d['requires_expiry'] ?? 1),
            (int)($d['is_active'] ?? 1),
            (int)($d['sort_order'] ?? 0),
            $d['created_by'] ?? null,
        ]);
        return (int)db()->lastInsertId();
    }

    public static function update(int $id, array $d): void {
        $s = db()->prepare(
            'UPDATE document_templates
             SET name_ar=?, name_en=?, name_fr=?, icon=?, scope=?,
                 requires_expiry=?, is_active=?, sort_order=?
             WHERE id=?'
        );
        $s->execute([
            $d['name_ar'], $d['name_en'], $d['name_fr'],
            $d['icon'] ?: '📄', $d['scope'],
            (int)($d['requires_expiry'] ?? 1),
            (int)($d['is_active'] ?? 1),
            (int)($d['sort_order'] ?? 0),
            $id,
        ]);
    }

    public static function toggle(int $id): void {
        db()->prepare('UPDATE document_templates SET is_active = 1 - is_active WHERE id=?')
            ->execute([$id]);
    }

    public static function delete(int $id): void {
        db()->prepare('DELETE FROM document_templates WHERE id=?')->execute([$id]);
    }

    /** عدد الوثائق المرفوعة فعلياً تحت قالب معيّن (لمنع الحذف غير الآمن) */
    public static function usageCount(string $code): int {
        $s = db()->prepare('SELECT COUNT(*) FROM documents WHERE type=?');
        $s->execute([$code]);
        return (int)$s->fetchColumn();
    }

    /** الاسم المترجم لقالب حسب اللغة الحالية، مع تراجع آمن */
    public static function label(string $code): string {
        $tpl = self::findByCode($code);
        if ($tpl) {
            $col = 'name_'.lang();
            return $tpl[$col] ?? $tpl['name_en'] ?? $code;
        }
        // تراجع لمفاتيح الترجمة القديمة إن وُجدت
        $legacy = t('doc_'.$code);
        return $legacy !== 'doc_'.$code ? $legacy : $code;
    }

    public static function icon(string $code): string {
        $tpl = self::findByCode($code);
        return $tpl['icon'] ?? '📄';
    }
}
