<?php
declare(strict_types=1);

if (session_status() !== PHP_SESSION_ACTIVE) {
    session_start();
}

require_once __DIR__ . '/../../db.php';
require_once __DIR__ . '/../../inc/layout.php';

if (empty($_SESSION['user_id'])) {
    header('Location: ../../index.html?e=1');
    exit;
}

$pdo = db();
if (!$pdo instanceof PDO) {
    http_response_code(500);
    exit('DB not ready');
}

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

if (!function_exists('h')) {
    function h($value): string
    {
        return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
    }
}

if (!function_exists('old')) {
    function old(string $key, string $default = ''): string
    {
        return isset($_POST[$key]) ? trim((string)$_POST[$key]) : $default;
    }
}

if (!function_exists('table_columns')) {
    function table_columns(PDO $pdo, string $table): array
    {
        try {
            $st = $pdo->query("SHOW COLUMNS FROM `{$table}`");
            $rows = $st->fetchAll(PDO::FETCH_ASSOC);
            $cols = [];

            foreach ($rows as $r) {
                $cols[] = (string)($r['Field'] ?? '');
            }

            return $cols;
        } catch (Throwable $e) {
            return [];
        }
    }
}

if (!function_exists('has_col')) {
    function has_col(array $cols, string $name): bool
    {
        return in_array($name, $cols, true);
    }
}

$userId   = (int)($_SESSION['user_id'] ?? 0);
$branchId = (int)($_SESSION['branch_id'] ?? 0);

$errors = [];
$templates = [];
$clients = [];
$lawyers = [];
$contractTypes = [];

$templateIdFromUrl = (int)($_GET['template_id'] ?? 0);

/*
|--------------------------------------------------------------------------
| تحميل البيانات
|--------------------------------------------------------------------------
*/
try {
    $templatesStmt = $pdo->query("
        SELECT id, template_name, template_code
        FROM contract_templates
        WHERE is_active = 1
        ORDER BY template_name ASC
    ");
    $templates = $templatesStmt->fetchAll();
} catch (Throwable $e) {
    $templates = [];
    $errors[] = 'تعذر تحميل قوالب العقود.';
}

try {
    $clientsStmt = $pdo->query("
        SELECT id, name, phone, email
        FROM clients
        ORDER BY name ASC
    ");
    $clients = $clientsStmt->fetchAll();
} catch (Throwable $e) {
    $clients = [];
    $errors[] = 'تعذر تحميل قائمة العملاء.';
}

try {
    $typesStmt = $pdo->query("
        SELECT id, contract_name
        FROM contract_types
        ORDER BY contract_name ASC
    ");
    $contractTypes = $typesStmt->fetchAll();
} catch (Throwable $e) {
    $contractTypes = [];
}

/*
|--------------------------------------------------------------------------
| تحميل المحامين فقط بشكل ذكي
|--------------------------------------------------------------------------
*/
try {
    $employeeCols = table_columns($pdo, 'employees');

    $whereStatus = "(status = 'active' OR status IS NULL OR status = '')";
    $lawyerFilter = '';

    if (has_col($employeeCols, 'role')) {
        $lawyerFilter = " AND (
            UPPER(TRIM(COALESCE(role,''))) = 'LAWYER'
            OR UPPER(TRIM(COALESCE(role,''))) = 'LEGAL CONSULTANT'
            OR role LIKE '%محامي%'
            OR role LIKE '%مستشار%'
        )";
    } elseif (has_col($employeeCols, 'job_title')) {
        $lawyerFilter = " AND (
            job_title LIKE '%محامي%'
            OR job_title LIKE '%مستشار%'
            OR job_title LIKE '%قانوني%'
        )";
    } elseif (has_col($employeeCols, 'position')) {
        $lawyerFilter = " AND (
            position LIKE '%محامي%'
            OR position LIKE '%مستشار%'
            OR position LIKE '%قانوني%'
        )";
    } elseif (has_col($employeeCols, 'department')) {
        $lawyerFilter = " AND (
            department LIKE '%قانوني%'
            OR department LIKE '%الشؤون القانونية%'
            OR department LIKE '%Legal%'
        )";
    }

    $lawyersStmt = $pdo->query("
        SELECT id, full_name
        FROM employees
        WHERE {$whereStatus} {$lawyerFilter}
        ORDER BY full_name ASC
    ");
    $lawyers = $lawyersStmt->fetchAll();

    if (!$lawyers) {
        $fallbackStmt = $pdo->query("
            SELECT id, full_name
            FROM employees
            WHERE {$whereStatus}
            ORDER BY full_name ASC
        ");
        $lawyers = $fallbackStmt->fetchAll();
    }
} catch (Throwable $e) {
    $lawyers = [];
    $errors[] = 'تعذر تحميل قائمة المحامين.';
}

/*
|--------------------------------------------------------------------------
| معالجة الإرسال
|--------------------------------------------------------------------------
*/
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $clientId       = (int)($_POST['client_id'] ?? 0);
    $templateId     = (int)($_POST['template_id'] ?? 0);
    $lawyerId       = (int)($_POST['lawyer_id'] ?? 0);
    $contractTypeId = (int)($_POST['contract_type_id'] ?? 0);

    $title     = trim((string)($_POST['title'] ?? ''));
    $amount    = trim((string)($_POST['amount'] ?? '0'));
    $startDate = trim((string)($_POST['start_date'] ?? ''));
    $endDate   = trim((string)($_POST['end_date'] ?? ''));
    $notes     = trim((string)($_POST['notes'] ?? ''));
    $subject   = trim((string)($_POST['subject'] ?? ''));

    if ($clientId <= 0) {
        $errors[] = 'يرجى اختيار العميل من القائمة.';
    }

    if ($templateId <= 0) {
        $errors[] = 'يرجى اختيار قالب العقد.';
    }

    if ($title === '') {
        $errors[] = 'يرجى كتابة عنوان العقد.';
    }

    if ($startDate === '') {
        $errors[] = 'يرجى تحديد تاريخ بداية العقد.';
    }

    if ($endDate === '') {
        $errors[] = 'يرجى تحديد تاريخ نهاية العقد.';
    }

    if ($startDate !== '' && $endDate !== '' && strtotime($endDate) < strtotime($startDate)) {
        $errors[] = 'تاريخ نهاية العقد يجب أن يكون بعد تاريخ البداية.';
    }

    if ($amount !== '' && !is_numeric($amount)) {
        $errors[] = 'قيمة العقد يجب أن تكون رقمًا صحيحًا.';
    }

    if (!$errors) {
        $_SESSION['contract_generator_data'] = [
            'client_id'        => $clientId,
            'template_id'      => $templateId,
            'lawyer_id'        => $lawyerId,
            'contract_type_id' => $contractTypeId,
            'title'            => $title,
            'amount'           => (float)$amount,
            'start_date'       => $startDate,
            'end_date'         => $endDate,
            'subject'          => $subject,
            'notes'            => $notes,
            'branch_id'        => $branchId,
            'created_by'       => $userId,
        ];

        header('Location: preview.php');
        exit;
    }
}

/*
|--------------------------------------------------------------------------
| تحديد القيم المختارة مسبقًا
|--------------------------------------------------------------------------
*/
$selectedTemplateId = 0;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $selectedTemplateId = (int)old('template_id');
} else {
    $selectedTemplateId = $templateIdFromUrl;
}

$selectedClientId = (int)old('client_id');
$selectedClientText = '';

foreach ($clients as $c) {
    if ((int)$c['id'] === $selectedClientId) {
        $selectedClientText = trim((string)($c['name'] ?? ''));
        if (!empty($c['phone'])) {
            $selectedClientText .= ' - ' . trim((string)$c['phone']);
        }
        if (!empty($c['email'])) {
            $selectedClientText .= ' - ' . trim((string)$c['email']);
        }
        break;
    }
}

render_layout_start('إنشاء عقد من قالب');
?>

<style>
:root{
    --hlg-dark:#0b3440;
    --hlg-teal:#0a6474;
    --hlg-teal-2:#0d7385;
    --hlg-gold:#d4af37;
    --hlg-card:#ffffff;
    --hlg-line:#dce7eb;
    --hlg-text:#16343c;
    --hlg-muted:#6d8086;
    --hlg-danger:#b42318;
    --hlg-danger-bg:#fff3f2;
    --hlg-shadow:0 18px 44px rgba(0,66,79,.10);
    --hlg-radius:26px;
    --hlg-soft:#f7fbfc;
}

.cg-wrap{
    direction:rtl;
    font-family:'Tajawal',sans-serif;
    padding:22px;
    max-width:1220px;
    margin:0 auto;
    color:var(--hlg-text);
}

.cg-hero{
    position:relative;
    overflow:hidden;
    background:linear-gradient(135deg, var(--hlg-dark) 0%, var(--hlg-teal) 55%, var(--hlg-teal-2) 100%);
    color:#fff;
    border-radius:32px;
    padding:28px 28px 26px;
    box-shadow:var(--hlg-shadow);
    margin-bottom:18px;
}

.cg-hero::before{
    content:"";
    position:absolute;
    left:-60px;
    top:-50px;
    width:220px;
    height:220px;
    background:rgba(255,255,255,.05);
    border-radius:50%;
}

.cg-hero::after{
    content:"";
    position:absolute;
    right:-30px;
    bottom:-60px;
    width:240px;
    height:240px;
    background:rgba(255,255,255,.06);
    border-radius:50%;
}

.cg-hero-content{
    position:relative;
    z-index:2;
}

.cg-title{
    margin:0 0 10px;
    font-size:34px;
    line-height:1.2;
    font-weight:800;
}

.cg-sub{
    margin:0;
    font-size:15px;
    line-height:2;
    opacity:.96;
    max-width:850px;
}

.cg-card{
    background:var(--hlg-card);
    border:1px solid var(--hlg-line);
    border-radius:30px;
    box-shadow:var(--hlg-shadow);
    overflow:hidden;
}

.cg-card-head{
    padding:22px 24px;
    border-bottom:1px solid #e9f0f2;
    background:linear-gradient(to left, #ffffff, #f8fbfc);
}

.cg-card-head h2{
    margin:0;
    color:var(--hlg-dark);
    font-size:28px;
    font-weight:800;
}

.cg-card-body{
    padding:24px;
}

.cg-errors{
    background:var(--hlg-danger-bg);
    border:1px solid #f1c6c3;
    color:var(--hlg-danger);
    border-radius:18px;
    padding:14px 16px;
    margin-bottom:18px;
}

.cg-errors ul{
    margin:0;
    padding:0 18px 0 0;
}

.cg-section{
    margin-bottom:22px;
    padding-bottom:22px;
    border-bottom:1px dashed #d9e5e8;
}

.cg-section:last-child{
    margin-bottom:0;
    padding-bottom:0;
    border-bottom:none;
}

.cg-section-title{
    margin:0 0 16px;
    color:var(--hlg-dark);
    font-size:22px;
    font-weight:800;
}

.cg-grid{
    display:grid;
    grid-template-columns:repeat(12, minmax(0,1fr));
    gap:16px;
}

.cg-col-12{grid-column:span 12;}
.cg-col-6{grid-column:span 6;}
.cg-col-4{grid-column:span 4;}
.cg-col-3{grid-column:span 3;}

.cg-field{
    display:flex;
    flex-direction:column;
    gap:8px;
}

.cg-label{
    font-size:15px;
    color:var(--hlg-dark);
    font-weight:800;
}

.cg-input,
.cg-select,
.cg-textarea{
    width:100%;
    border:1px solid var(--hlg-line);
    background:#fff;
    color:var(--hlg-text);
    border-radius:18px;
    min-height:56px;
    padding:13px 16px;
    font-size:15px;
    outline:none;
    transition:.18s ease;
    box-sizing:border-box;
    box-shadow:0 1px 0 rgba(0,0,0,.01);
}

.cg-textarea{
    min-height:140px;
    resize:vertical;
    line-height:1.9;
}

.cg-input::placeholder,
.cg-textarea::placeholder{
    color:#8ea0a6;
}

.cg-input:focus,
.cg-select:focus,
.cg-textarea:focus{
    border-color:var(--hlg-teal);
    box-shadow:0 0 0 4px rgba(10,100,116,.10);
}

.cg-hint{
    font-size:12px;
    color:var(--hlg-muted);
    line-height:1.8;
}

.cg-actions{
    display:flex;
    gap:12px;
    flex-wrap:wrap;
    margin-top:24px;
}

.cg-btn{
    appearance:none;
    border:none;
    border-radius:18px;
    padding:13px 22px;
    font-size:15px;
    font-weight:800;
    cursor:pointer;
    transition:.18s ease;
    text-decoration:none;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width:160px;
}

.cg-btn:hover{
    transform:translateY(-1px);
}

.cg-btn-primary{
    background:linear-gradient(135deg, var(--hlg-dark) 0%, var(--hlg-teal) 100%);
    color:#fff;
    box-shadow:0 12px 26px rgba(0,66,79,.18);
}

.cg-btn-light{
    background:#fff;
    color:var(--hlg-dark);
    border:1px solid var(--hlg-line);
}

.cg-note{
    margin-top:16px;
    background:#fffaf0;
    border:1px solid #f0e0ae;
    border-radius:18px;
    padding:14px 16px;
    color:#7a5a08;
    line-height:1.9;
    font-size:14px;
}

.cg-pill{
    display:inline-flex;
    align-items:center;
    gap:8px;
    background:rgba(255,255,255,.10);
    border:1px solid rgba(255,255,255,.12);
    border-radius:999px;
    padding:8px 14px;
    margin-top:14px;
    font-size:13px;
}

.cg-pill-dot{
    width:8px;
    height:8px;
    border-radius:50%;
    background:var(--hlg-gold);
    box-shadow:0 0 0 4px rgba(212,175,55,.15);
}

@media (max-width: 980px){
    .cg-wrap{
        padding:16px;
    }

    .cg-title{
        font-size:26px;
    }

    .cg-card-head h2{
        font-size:22px;
    }

    .cg-col-6,
    .cg-col-4,
    .cg-col-3{
        grid-column:span 12;
    }

    .cg-card-body{
        padding:16px;
    }

    .cg-hero{
        padding:22px 20px;
        border-radius:26px;
    }
}
</style>

<div class="cg-wrap">
    <div class="cg-hero">
        <div class="cg-hero-content">
            <h1 class="cg-title">إنشاء عقد جديد من قالب</h1>
            <p class="cg-sub">
                اختر العميل والقالب وأدخل البيانات الأساسية، ثم سيتم توليد نص العقد تلقائيًا في صفحة المعاينة قبل الحفظ النهائي.
            </p>
            <div class="cg-pill">
                <span class="cg-pill-dot"></span>
                <span>التصميم متوافق مع واجهة HLG-ONE</span>
            </div>
        </div>
    </div>

    <div class="cg-card">
        <div class="cg-card-head">
            <h2>إعداد بيانات العقد</h2>
        </div>

        <div class="cg-card-body">
            <?php if ($errors): ?>
                <div class="cg-errors">
                    <ul>
                        <?php foreach ($errors as $err): ?>
                            <li><?= h($err) ?></li>
                        <?php endforeach; ?>
                    </ul>
                </div>
            <?php endif; ?>

            <form method="post" action="">
                <div class="cg-section">
                    <h3 class="cg-section-title">البيانات الأساسية</h3>

                    <div class="cg-grid">
                        <div class="cg-col-6">
                            <div class="cg-field">
                                <label class="cg-label" for="client_search">العميل</label>

                                <input
                                    class="cg-input"
                                    type="text"
                                    id="client_search"
                                    list="clients_list"
                                    value="<?= h($selectedClientText) ?>"
                                    placeholder="ابحث باسم العميل أو الهاتف أو البريد"
                                    autocomplete="off"
                                    required
                                >

                                <datalist id="clients_list">
                                    <?php foreach ($clients as $c): ?>
                                        <?php
                                            $clientLabel = trim((string)($c['name'] ?? ''));
                                            $clientPhone = trim((string)($c['phone'] ?? ''));
                                            $clientEmail = trim((string)($c['email'] ?? ''));

                                            $displayText = $clientLabel;
                                            if ($clientPhone !== '') {
                                                $displayText .= ' - ' . $clientPhone;
                                            }
                                            if ($clientEmail !== '') {
                                                $displayText .= ' - ' . $clientEmail;
                                            }
                                        ?>
                                        <option
                                            value="<?= h($displayText) ?>"
                                            data-id="<?= (int)$c['id'] ?>">
                                        </option>
                                    <?php endforeach; ?>
                                </datalist>

                                <input
                                    type="hidden"
                                    name="client_id"
                                    id="client_id"
                                    value="<?= $selectedClientId > 0 ? $selectedClientId : '' ?>"
                                >

                                <div class="cg-hint">ابدأ بكتابة اسم العميل أو الهاتف أو البريد، ثم اختره من القائمة.</div>
                            </div>
                        </div>

                        <div class="cg-col-6">
                            <div class="cg-field">
                                <label class="cg-label" for="template_id">قالب العقد</label>
                                <select class="cg-select" name="template_id" id="template_id" required>
                                    <option value="">اختر قالب العقد</option>
                                    <?php foreach ($templates as $t): ?>
                                        <option
                                            value="<?= (int)$t['id'] ?>"
                                            <?= ($selectedTemplateId === (int)$t['id']) ? 'selected' : '' ?>
                                        >
                                            <?= h($t['template_name']) ?><?= !empty($t['template_code']) ? ' - ' . h($t['template_code']) : '' ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                                <div class="cg-hint">مثال: عقد خدمات قانونية، عقد أتعاب، عقد استشارة.</div>
                            </div>
                        </div>

                        <div class="cg-col-6">
                            <div class="cg-field">
                                <label class="cg-label" for="title">عنوان العقد</label>
                                <input
                                    class="cg-input"
                                    type="text"
                                    name="title"
                                    id="title"
                                    value="<?= h(old('title')) ?>"
                                    placeholder="مثال: عقد خدمات قانونية مع شركة ..."
                                    required
                                >
                            </div>
                        </div>

                        <div class="cg-col-3">
                            <div class="cg-field">
                                <label class="cg-label" for="contract_type_id">نوع العقد</label>
                                <select class="cg-select" name="contract_type_id" id="contract_type_id">
                                    <option value="">اختر النوع</option>
                                    <?php foreach ($contractTypes as $ct): ?>
                                        <option
                                            value="<?= (int)$ct['id'] ?>"
                                            <?= ((int)old('contract_type_id') === (int)$ct['id']) ? 'selected' : '' ?>
                                        >
                                            <?= h($ct['contract_name']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                        </div>

                        <div class="cg-col-3">
                            <div class="cg-field">
                                <label class="cg-label" for="lawyer_id">المحامي المسؤول</label>
                                <select class="cg-select" name="lawyer_id" id="lawyer_id">
                                    <option value="">اختر المحامي</option>
                                    <?php foreach ($lawyers as $l): ?>
                                        <option
                                            value="<?= (int)$l['id'] ?>"
                                            <?= ((int)old('lawyer_id') === (int)$l['id']) ? 'selected' : '' ?>
                                        >
                                            <?= h($l['full_name']) ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                                <div class="cg-hint">يتم جلب المحامين فقط تلقائيًا متى توفرت خانة تمييزهم في جدول الموظفين.</div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="cg-section">
                    <h3 class="cg-section-title">التفاصيل المالية والزمنية</h3>

                    <div class="cg-grid">
                        <div class="cg-col-4">
                            <div class="cg-field">
                                <label class="cg-label" for="amount">قيمة العقد</label>
                                <input
                                    class="cg-input"
                                    type="number"
                                    step="0.01"
                                    min="0"
                                    name="amount"
                                    id="amount"
                                    value="<?= h(old('amount', '0')) ?>"
                                    placeholder="0.00"
                                >
                            </div>
                        </div>

                        <div class="cg-col-4">
                            <div class="cg-field">
                                <label class="cg-label" for="start_date">تاريخ البداية</label>
                                <input
                                    class="cg-input"
                                    type="date"
                                    name="start_date"
                                    id="start_date"
                                    value="<?= h(old('start_date')) ?>"
                                    required
                                >
                            </div>
                        </div>

                        <div class="cg-col-4">
                            <div class="cg-field">
                                <label class="cg-label" for="end_date">تاريخ النهاية</label>
                                <input
                                    class="cg-input"
                                    type="date"
                                    name="end_date"
                                    id="end_date"
                                    value="<?= h(old('end_date')) ?>"
                                    required
                                >
                            </div>
                        </div>

                        <div class="cg-col-12">
                            <div class="cg-field">
                                <label class="cg-label" for="subject">موضوع العقد</label>
                                <input
                                    class="cg-input"
                                    type="text"
                                    name="subject"
                                    id="subject"
                                    value="<?= h(old('subject')) ?>"
                                    placeholder="اكتب موضوع العقد باختصار"
                                >
                            </div>
                        </div>
                    </div>
                </div>

                <div class="cg-section">
                    <h3 class="cg-section-title">ملاحظات إضافية</h3>

                    <div class="cg-grid">
                        <div class="cg-col-12">
                            <div class="cg-field">
                                <label class="cg-label" for="notes">ملاحظات داخلية</label>
                                <textarea
                                    class="cg-textarea"
                                    name="notes"
                                    id="notes"
                                    placeholder="أي ملاحظات إضافية تخص العقد أو المراجعة الداخلية"
                                ><?= h(old('notes')) ?></textarea>
                                <div class="cg-hint">هذه الملاحظات للاستخدام الداخلي ويمكن عدم إظهارها داخل نص العقد النهائي.</div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="cg-actions">
                    <button type="submit" class="cg-btn cg-btn-primary">متابعة إلى المعاينة</button>
                    <a href="../index.php" class="cg-btn cg-btn-light">رجوع إلى العقود</a>
                </div>

                <div class="cg-note">
                    هذه الصفحة لا تحفظ العقد مباشرة في قاعدة البيانات، بل تنقل البيانات إلى صفحة المعاينة
                    preview.php لتوليد النص النهائي ومراجعته قبل الحفظ.
                </div>
            </form>
        </div>
    </div>
</div>

<script>
(function () {
    const searchInput = document.getElementById('client_search');
    const hiddenInput = document.getElementById('client_id');
    const options = document.querySelectorAll('#clients_list option');

    function syncSelectedClient() {
        const val = searchInput.value.trim();
        hiddenInput.value = '';

        options.forEach(function (opt) {
            if (opt.value === val) {
                hiddenInput.value = opt.dataset.id || '';
            }
        });
    }

    searchInput.addEventListener('input', syncSelectedClient);
    searchInput.addEventListener('change', syncSelectedClient);

    const form = searchInput.closest('form');
    if (form) {
        form.addEventListener('submit', function (e) {
            syncSelectedClient();

            if (!hiddenInput.value) {
                e.preventDefault();
                alert('يرجى اختيار العميل من القائمة المقترحة.');
                searchInput.focus();
            }
        });
    }
})();
</script>

<?php render_layout_end(); ?>