<?php
require_once __DIR__ . '/../includes/functions.php';
require_role('employee');

$user = current_user();
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user['id']]);
$u = $stmt->fetch();

$wasComplete = profile_is_complete($pdo, $user['id']);
$locked = $wasComplete; // بعد از اولین تکمیل، فیلدهای هویتی قفل می‌شوند (مشابه افراد تبعی)
$lockedFields = ['gender', 'national_code', 'id_number', 'birth_date'];

$doc_stmt = $pdo->prepare("SELECT * FROM user_documents WHERE user_id = ?");
$doc_stmt->execute([$user['id']]);
$existingDocs = $doc_stmt->fetchAll();
$uploadedTypes = array_column($existingDocs, 'doc_type');

$docLabels = required_document_types();
$optionalLabels = optional_document_types();
$allDocLabels = array_merge($docLabels, $optionalLabels);

$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    verify_csrf();

    $gender = in_array('gender', $lockedFields) && $locked ? $u['gender'] : ($_POST['gender'] ?? '');
    $national_code = in_array('national_code', $lockedFields) && $locked ? $u['national_code'] : trim($_POST['national_code'] ?? '');
    $id_number = in_array('id_number', $lockedFields) && $locked ? $u['id_number'] : trim($_POST['id_number'] ?? '');

    $mobile = trim($_POST['mobile'] ?? '');
    $phone = trim($_POST['phone'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $address = trim($_POST['address'] ?? '');
    $has_medical = $_POST['has_medical_condition'] ?? '';
    $medical_history = trim($_POST['medical_history'] ?? '');

    if (in_array('birth_date', $lockedFields) && $locked) {
        $birth_date_sql = $u['birth_date'];
    } else {
        $birth_date_j = trim($_POST['birth_date'] ?? '');
        $birth_g = parse_jalali_date($birth_date_j);
        if (!$birth_g || !is_jalali_date_not_future($birth_date_j)) {
            $error = 'تاریخ تولد نامعتبر است یا در آینده است.';
        } else {
            $birth_date_sql = sprintf('%04d-%02d-%02d', $birth_g[0], $birth_g[1], $birth_g[2]);
        }
    }

    if (!$error && !in_array($gender, ['male', 'female'])) {
        $error = 'جنسیت را انتخاب کنید.';
    }
    if (!$error && ($national_code === '' || $id_number === '' || $mobile === '' || $email === '' || $address === '')) {
        $error = 'همه فیلدهای الزامی را تکمیل کنید.';
    }
    if (!$error && !in_array($has_medical, ['0', '1'])) {
        $error = 'به سوال «آیا بیماری خاصی دارید؟» پاسخ دهید.';
    }
    if (!$error && $has_medical === '1' && $medical_history === '') {
        $error = 'توضیح سوابق بیماری الزامی است.';
    }
    if (!$error && !$locked) {
        $missingDocs = [];
        foreach ($docLabels as $type => $label) {
            if (empty($_FILES['doc']['name'][$type] ?? '') && !in_array($type, $uploadedTypes)) {
                $missingDocs[] = $label;
            }
        }
        if ($missingDocs) {
            $error = 'مدارک زیر الزامی هستند: ' . implode('، ', $missingDocs);
        }
    }

    if (!$error) {
        $stmt2 = $pdo->prepare("
            UPDATE users SET gender = ?, national_code = ?, id_number = ?, mobile = ?, phone = ?, email = ?,
                address = ?, birth_date = ?, has_medical_condition = ?, medical_history = ?
            WHERE id = ?
        ");
        $stmt2->execute([
            $gender, $national_code, $id_number, $mobile, $phone ?: null, $email,
            $address, $birth_date_sql, (int)$has_medical, ($has_medical === '1') ? $medical_history : null,
            $user['id'],
        ]);

        $docStmt = $pdo->prepare("INSERT INTO user_documents (user_id, doc_type, file_path, original_name) VALUES (?, ?, ?, ?)");
        foreach ($allDocLabels as $type => $label) {
            if (empty($_FILES['doc']['name'][$type] ?? '')) continue;
            $single = [
                'name' => $_FILES['doc']['name'][$type],
                'type' => $_FILES['doc']['type'][$type],
                'tmp_name' => $_FILES['doc']['tmp_name'][$type],
                'error' => $_FILES['doc']['error'][$type],
                'size' => $_FILES['doc']['size'][$type],
            ];
            $up = handle_document_upload($single, 'user_' . $user['id']);
            if ($up) {
                $docStmt->execute([$user['id'], $type, $up['file_path'], $up['original_name']]);
            }
        }
        if (!empty($_FILES['doc_other']['name']) && is_array($_FILES['doc_other']['name'])) {
            $count = count($_FILES['doc_other']['name']);
            for ($i = 0; $i < $count; $i++) {
                if ($_FILES['doc_other']['error'][$i] === UPLOAD_ERR_NO_FILE) continue;
                $single = [
                    'name' => $_FILES['doc_other']['name'][$i],
                    'type' => $_FILES['doc_other']['type'][$i],
                    'tmp_name' => $_FILES['doc_other']['tmp_name'][$i],
                    'error' => $_FILES['doc_other']['error'][$i],
                    'size' => $_FILES['doc_other']['size'][$i],
                ];
                $up = handle_document_upload($single, 'user_' . $user['id']);
                if ($up) {
                    $docStmt->execute([$user['id'], 'other', $up['file_path'], $up['original_name']]);
                }
            }
        }

        log_activity($pdo, $wasComplete ? 'update_profile' : 'complete_profile', 'بروزرسانی اطلاعات پروفایل');
        $_SESSION['flash_success'] = 'اطلاعات با موفقیت ذخیره شد.';
        header('Location: ' . base_url($wasComplete ? 'employee/profile.php' : 'employee/dashboard.php'));
        exit;
    }
}

$page_title = 'پروفایل';
include __DIR__ . '/../includes/header.php';
?>

<h4 class="mb-2"><?= $locked ? 'ویرایش اطلاعات تماس' : 'تکمیل اطلاعات پروفایل' ?></h4>
<?php if (!$locked): ?>
  <p class="text-muted">برای استفاده از سامانه، ابتدا باید این اطلاعات را تکمیل کنید.</p>
<?php else: ?>
  <p class="text-muted small">اطلاعات هویتی شما ثبت شده؛ فیلدهای هویتی (نام، نسبت، کد ملی، شماره شناسنامه، جنسیت، تاریخ تولد) دیگر قابل ویرایش نیستند. فقط اطلاعات تماس/آدرس/سوابق و مدارک قابل بروزرسانی هستند.</p>
<?php endif; ?>
<?php if ($error): ?><div class="alert alert-danger"><?= htmlspecialchars($error) ?></div><?php endif; ?>

<div class="card p-4">
  <form method="post" enctype="multipart/form-data" novalidate>
    <?= csrf_field() ?>
    <div class="row g-3">
      <div class="col-md-3">
        <label class="form-label">جنسیت *</label>
        <select name="gender" class="form-select" <?= $locked ? 'disabled' : 'required' ?>>
          <option value="">— انتخاب کنید —</option>
          <option value="male" <?= ($u['gender'] ?? '') === 'male' ? 'selected' : '' ?>>مرد</option>
          <option value="female" <?= ($u['gender'] ?? '') === 'female' ? 'selected' : '' ?>>زن</option>
        </select>
      </div>
      <div class="col-md-3">
        <label class="form-label">تاریخ تولد *</label>
        <input type="text" name="birth_date" class="form-control <?= $locked ? '' : 'jalali-date-input' ?>" autocomplete="off" placeholder="1370/05/10"
               value="<?= $u['birth_date'] ? to_jalali_string_latin($u['birth_date']) : '' ?>" <?= $locked ? 'disabled' : 'required' ?>>
      </div>
      <div class="col-md-3">
        <label class="form-label">کد ملی *</label>
        <input type="text" name="national_code" class="form-control" inputmode="numeric" value="<?= htmlspecialchars($u['national_code'] ?? '') ?>" <?= $locked ? 'disabled' : 'required' ?>>
      </div>
      <div class="col-md-3">
        <label class="form-label">شماره شناسنامه *</label>
        <input type="text" name="id_number" class="form-control" inputmode="numeric" value="<?= htmlspecialchars($u['id_number'] ?? '') ?>" <?= $locked ? 'disabled' : 'required' ?>>
      </div>

      <div class="col-md-4">
        <label class="form-label">شماره همراه *</label>
        <input type="text" name="mobile" class="form-control" inputmode="numeric" required value="<?= htmlspecialchars($u['mobile'] ?? '') ?>">
      </div>
      <div class="col-md-4">
        <label class="form-label">ایمیل *</label>
        <input type="email" name="email" class="form-control" required value="<?= htmlspecialchars($u['email'] ?? '') ?>">
      </div>
      <div class="col-md-4">
        <label class="form-label">شماره ثابت (اختیاری)</label>
        <input type="text" name="phone" class="form-control" inputmode="numeric" value="<?= htmlspecialchars($u['phone'] ?? '') ?>">
      </div>
      <div class="col-12">
        <label class="form-label">آدرس *</label>
        <textarea name="address" class="form-control" rows="2" required><?= htmlspecialchars($u['address'] ?? '') ?></textarea>
      </div>

      <div class="col-12">
        <label class="form-label d-block">آیا بیماری خاصی دارید؟ *</label>
        <div class="form-check form-check-inline">
          <input type="radio" name="has_medical_condition" value="1" class="form-check-input" id="medYes" required <?= (isset($u['has_medical_condition']) && (int)$u['has_medical_condition'] === 1) ? 'checked' : '' ?>>
          <label class="form-check-label" for="medYes">بله</label>
        </div>
        <div class="form-check form-check-inline">
          <input type="radio" name="has_medical_condition" value="0" class="form-check-input" id="medNo" required <?= (isset($u['has_medical_condition']) && (int)$u['has_medical_condition'] === 0) ? 'checked' : '' ?>>
          <label class="form-check-label" for="medNo">خیر</label>
        </div>
      </div>
      <div class="col-12" id="medicalHistoryWrap" style="display:none;">
        <label class="form-label">توضیح سوابق بیماری *</label>
        <textarea name="medical_history" class="form-control" rows="2"><?= htmlspecialchars($u['medical_history'] ?? '') ?></textarea>
      </div>
    </div>

    <hr class="my-4">
    <h6>مدارک هویتی</h6>
    <div class="row g-3">
      <?php foreach ($docLabels as $type => $label): ?>
        <div class="col-md-4">
          <label class="form-label small">
            <?= htmlspecialchars($label) ?> <?= in_array($type, $uploadedTypes) ? '' : '*' ?>
            <?php if (in_array($type, $uploadedTypes)): ?><span class="badge bg-success">آپلود شده</span><?php endif; ?>
          </label>
          <input type="file" name="doc[<?= $type ?>]" class="form-control form-control-sm" <?= in_array($type, $uploadedTypes) ? '' : 'required' ?> accept=".jpg,.jpeg,.png,.pdf">
        </div>
      <?php endforeach; ?>
      <div class="col-md-4">
        <label class="form-label small">سایر مدارک (اختیاری)</label>
        <input type="file" name="doc_other[]" class="form-control form-control-sm" multiple accept=".jpg,.jpeg,.png,.pdf">
        <div class="form-text">اگر شناسنامه شما جدید است و صفحات سوم/چهارم ندارد، توضیح آن را همراه مدرک مرتبط از همین قسمت بارگذاری کنید.</div>
      </div>
    </div>

    <?php if ($locked): ?>
      <input type="hidden" name="gender" value="<?= htmlspecialchars($u['gender'] ?? '') ?>">
      <input type="hidden" name="national_code" value="<?= htmlspecialchars($u['national_code'] ?? '') ?>">
      <input type="hidden" name="id_number" value="<?= htmlspecialchars($u['id_number'] ?? '') ?>">
      <input type="hidden" name="birth_date" value="<?= $u['birth_date'] ? to_jalali_string_latin($u['birth_date']) : '' ?>">
    <?php endif; ?>

    <button type="submit" class="btn btn-primary mt-4">ذخیره</button>
  </form>
</div>

<script>
document.addEventListener('DOMContentLoaded', function () {
    var yes = document.getElementById('medYes');
    var no = document.getElementById('medNo');
    var wrap = document.getElementById('medicalHistoryWrap');
    var textarea = wrap.querySelector('textarea');
    function update() {
        if (yes.checked) {
            wrap.style.display = '';
            textarea.setAttribute('required', 'required');
        } else {
            wrap.style.display = 'none';
            textarea.removeAttribute('required');
            textarea.classList.remove('is-invalid');
        }
    }
    yes.addEventListener('change', update);
    no.addEventListener('change', update);
    update();
});
</script>

<?php include __DIR__ . '/../includes/footer.php'; ?>
