<?php
declare(strict_types=1);

error_reporting(E_ALL);
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');

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

require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/../inc/auth.php';
require_once __DIR__ . '/../inc/layout.php';
require_once __DIR__ . '/../inc/activity_log.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($s): string
    {
        return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8');
    }
}

if (!function_exists('branch_name_ar_simple')) {
    function branch_name_ar_simple(int $branchId): string
    {
        return match ($branchId) {
            1 => 'أبوظبي',
            2 => 'دبي',
            3 => 'الشارقة',
            4 => 'العين',
            default => 'غير محدد',
        };
    }
}

$role        = strtoupper((string)($_SESSION['role'] ?? 'STAFF'));
$userBranch  = (int)($_SESSION['branch_id'] ?? 1);
$canSwitch   = in_array($role, ['OWNER', 'ADMIN'], true);

$errors = [];
$okMsg  = '';

$name          = trim((string)($_POST['name'] ?? ''));
$idNumber      = trim((string)($_POST['id_number'] ?? ''));
$phone         = trim((string)($_POST['phone'] ?? ''));
$email         = trim((string)($_POST['email'] ?? ''));
$notes         = trim((string)($_POST['notes'] ?? ''));
$reminderDate  = trim((string)($_POST['reminder_date'] ?? ''));
$branchId      = $canSwitch ? (int)($_POST['branch_id'] ?? $userBranch) : $userBranch;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if ($name === '') {
        $errors[] = 'يرجى إدخال اسم العميل.';
    }

    if ($phone === '' && $email === '') {
        $errors[] = 'يرجى إدخال رقم الهاتف أو البريد الإلكتروني على الأقل.';
    }

    if ($email !== '' && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'صيغة البريد الإلكتروني غير صحيحة.';
    }

    if ($branchId < 1 || $branchId > 4) {
        $branchId = $userBranch;
    }

    $documentName = null;

    if (isset($_FILES['document']) && is_array($_FILES['document']) && (int)($_FILES['document']['error'] ?? UPLOAD_ERR_NO_FILE) !== UPLOAD_ERR_NO_FILE) {
        $fileError = (int)($_FILES['document']['error'] ?? UPLOAD_ERR_NO_FILE);

        if ($fileError !== UPLOAD_ERR_OK) {
            $errors[] = 'حدث خطأ أثناء رفع الملف.';
        } else {
            $tmpPath   = (string)($_FILES['document']['tmp_name'] ?? '');
            $origName  = (string)($_FILES['document']['name'] ?? '');
            $ext       = strtolower(pathinfo($origName, PATHINFO_EXTENSION));

            $allowed = ['pdf', 'jpg', 'jpeg', 'png', 'webp', 'doc', 'docx'];

            if (!in_array($ext, $allowed, true)) {
                $errors[] = 'نوع الملف غير مسموح. الأنواع المسموحة: PDF, JPG, PNG, WEBP, DOC, DOCX.';
            } else {
                $uploadDir = __DIR__ . '/../uploads/clients';
                if (!is_dir($uploadDir)) {
                    @mkdir($uploadDir, 0775, true);
                }

                if (!is_dir($uploadDir)) {
                    $errors[] = 'تعذر إنشاء مجلد رفع الملفات.';
                } else {
                    $documentName = 'client_' . date('Ymd_His') . '_' . bin2hex(random_bytes(4)) . '.' . $ext;
                    $destPath = $uploadDir . '/' . $documentName;

                    if (!@move_uploaded_file($tmpPath, $destPath)) {
                        $errors[] = 'تعذر حفظ الملف المرفوع.';
                        $documentName = null;
                    }
                }
            }
        }
    }

    if (!$errors) {
        try {
            $st = $pdo->prepare("
                INSERT INTO clients (
                    name,
                    id_number,
                    phone,
                    email,
                    notes,
                    reminder_date,
                    created_at,
                    document,
                    branch_id
                ) VALUES (
                    :name,
                    :id_number,
                    :phone,
                    :email,
                    :notes,
                    :reminder_date,
                    NOW(),
                    :document,
                    :branch_id
                )
            ");

            $st->execute([
                ':name'          => $name,
                ':id_number'     => $idNumber !== '' ? $idNumber : null,
                ':phone'         => $phone !== '' ? $phone : null,
                ':email'         => $email !== '' ? $email : null,
                ':notes'         => $notes !== '' ? $notes : null,
                ':reminder_date' => $reminderDate !== '' ? $reminderDate : null,
                ':document'      => $documentName,
                ':branch_id'     => $branchId,
            ]);

            $newId = (int)$pdo->lastInsertId();
activity_log(
    $pdo,
    'create_client',   // نوع العملية
    'clients',         // الموديول
    'client',          // نوع الكيان
    $clientId,         // رقم العميل (مهم جداً)
    'تم إضافة عميل جديد: ' . $clientName,
    'إضافة عميل',
    '👤',
    '#3b82f6'
);
            /* تسجيل إنجاز الموظف تلقائياً */
            try {
                if (function_exists('log_employee_achievement')) {
                    log_employee_achievement(
                        $pdo,
                        'إضافة عميل جديد',
                        'تمت إضافة العميل: ' . $name . ' | رقم العميل: ' . $newId
                    );
                } else {
                    error_log('log_employee_achievement function not found');
                }
            } catch (Throwable $e) {
                error_log('LOG EMPLOYEE ACHIEVEMENT ERROR [CLIENT ADD]: ' . $e->getMessage());
            }

            header('Location: ' . u('clients/view.php?id=' . $newId . '&added=1'));
            exit;        } catch (Throwable $e) {
            $errors[] = 'تعذر حفظ العميل حاليًا.';
        }
    }
}

render_layout_start('إضافة عميل');
?>

<style>
.clients-add-shell{
  width:100%;
  max-width:100%;
}

.clients-add-hero{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:16px;
  align-items:start;
  margin-bottom:18px;
}

.clients-add-hero-card{
  border:1px solid rgba(255,255,255,.08);
  background:linear-gradient(135deg, rgba(255,255,255,.05), rgba(255,255,255,.03));
  border-radius:22px;
  padding:22px;
  box-shadow:0 14px 34px rgba(0,0,0,.18);
}

.clients-add-title{
  margin:0 0 6px;
  font-size:34px;
  font-weight:900;
  line-height:1.1;
  color:#fff;
}

.clients-add-sub{
  margin:0;
  color:var(--layout-muted);
  font-size:15px;
  line-height:1.8;
}

.clients-back-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:52px;
  padding:0 18px;
  border-radius:16px;
  background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.10);
  color:#fff;
  text-decoration:none;
  font-weight:800;
  white-space:nowrap;
}

.clients-form-card{
  border:1px solid rgba(255,255,255,.08);
  background:rgba(255,255,255,.04);
  border-radius:24px;
  padding:20px;
  box-shadow:0 14px 34px rgba(0,0,0,.16);
}

.clients-alert{
  border-radius:16px;
  padding:14px 16px;
  margin-bottom:14px;
  font-weight:700;
}

.clients-alert.error{
  background:rgba(255,107,107,.12);
  border:1px solid rgba(255,107,107,.28);
  color:#fff;
}

.clients-alert.ok{
  background:rgba(76,217,100,.12);
  border:1px solid rgba(76,217,100,.28);
  color:#fff;
}

.clients-errors{
  margin:0;
  padding-right:18px;
}

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

.clients-field{
  display:flex;
  flex-direction:column;
  gap:8px;
  min-width:0;
}

.clients-field.full{
  grid-column:1 / -1;
}

.clients-label{
  color:#fff;
  font-size:14px;
  font-weight:800;
}

.clients-input,
.clients-select,
.clients-textarea,
.clients-file{
  width:100%;
  min-width:0;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.10);
  background:rgba(0,0,0,.18);
  color:#fff;
  font:inherit;
  outline:none;
}

.clients-input,
.clients-select,
.clients-file{
  height:50px;
  padding:0 14px;
}

.clients-textarea{
  min-height:130px;
  padding:12px 14px;
  resize:vertical;
}

.clients-input::placeholder,
.clients-textarea::placeholder{
  color:rgba(255,255,255,.45);
}

.clients-select option{
  background:#0b2633;
  color:#fff;
}

.clients-help{
  color:var(--layout-muted);
  font-size:12px;
  line-height:1.7;
}

.clients-actions{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  margin-top:20px;
}

.clients-submit-btn,
.clients-cancel-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:48px;
  padding:0 18px;
  border-radius:14px;
  font:inherit;
  font-weight:800;
  text-decoration:none;
  cursor:pointer;
  white-space:nowrap;
}

.clients-submit-btn{
  border:1px solid rgba(0,106,122,.45);
  background:linear-gradient(180deg, rgba(0,106,122,.35), rgba(0,66,79,.18));
  color:#fff;
}

.clients-cancel-btn{
  border:1px solid rgba(255,255,255,.10);
  background:rgba(255,255,255,.04);
  color:#fff;
}

@media (max-width: 900px){
  .clients-add-hero{
    grid-template-columns:1fr;
  }

  .clients-form-grid{
    grid-template-columns:1fr;
  }

  .clients-add-title{
    font-size:28px;
  }
}
</style>

<div class="clients-add-shell">
  <div class="clients-add-hero">
    <div class="clients-add-hero-card">
      <h1 class="clients-add-title">إضافة عميل</h1>
      <p class="clients-add-sub">أدخل بيانات العميل الأساسية بشكل واضح ومنظم لحفظها داخل النظام.</p>
    </div>

    <div>
      <a class="clients-back-btn" href="<?= h(u('clients/index.php')) ?>">العودة إلى العملاء</a>
    </div>
  </div>

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

    <?php if ($okMsg !== ''): ?>
      <div class="clients-alert ok"><?= h($okMsg) ?></div>
    <?php endif; ?>

    <form method="post" enctype="multipart/form-data" novalidate>
      <div class="clients-form-grid">
        <div class="clients-field">
          <label class="clients-label" for="name">اسم العميل</label>
          <input class="clients-input" type="text" id="name" name="name" value="<?= h($name) ?>" placeholder="مثال: أحمد محمد" required>
        </div>

        <div class="clients-field">
          <label class="clients-label" for="id_number">رقم الهوية</label>
          <input class="clients-input" type="text" id="id_number" name="id_number" value="<?= h($idNumber) ?>" placeholder="مثال: 784-XXXXXXX-X">
        </div>

        <div class="clients-field">
          <label class="clients-label" for="phone">رقم الهاتف</label>
          <input class="clients-input" type="text" id="phone" name="phone" value="<?= h($phone) ?>" placeholder="05XXXXXXXX">
        </div>

        <div class="clients-field">
          <label class="clients-label" for="email">البريد الإلكتروني</label>
          <input class="clients-input" type="email" id="email" name="email" value="<?= h($email) ?>" placeholder="name@example.com">
        </div>

        <div class="clients-field">
          <label class="clients-label" for="branch_id">الفرع</label>
          <?php if ($canSwitch): ?>
            <select class="clients-select" id="branch_id" name="branch_id">
              <option value="1" <?= $branchId === 1 ? 'selected' : '' ?>>أبوظبي</option>
              <option value="2" <?= $branchId === 2 ? 'selected' : '' ?>>دبي</option>
              <option value="3" <?= $branchId === 3 ? 'selected' : '' ?>>الشارقة</option>
              <option value="4" <?= $branchId === 4 ? 'selected' : '' ?>>العين</option>
            </select>
          <?php else: ?>
            <input type="hidden" name="branch_id" value="<?= (int)$branchId ?>">
            <div class="clients-input" style="display:flex;align-items:center;"><?= h(branch_name_ar_simple($branchId)) ?></div>
          <?php endif; ?>
        </div>

        <div class="clients-field">
          <label class="clients-label" for="reminder_date">تاريخ الاضافة</label>
          <input class="clients-input" type="date" id="reminder_date" name="reminder_date" value="<?= h($reminderDate) ?>">
        </div>

        <div class="clients-field full">
          <label class="clients-label" for="document">مرفق العميل</label>
          <input class="clients-file" type="file" id="document" name="document" accept=".pdf,.jpg,.jpeg,.png,.webp,.doc,.docx">
          <div class="clients-help">يمكن رفع ملف PDF أو صورة أو ملف Word.</div>
        </div>

        <div class="clients-field full">
          <label class="clients-label" for="notes">ملاحظات</label>
          <textarea class="clients-textarea" id="notes" name="notes" placeholder="أي ملاحظات إضافية عن العميل"><?= h($notes) ?></textarea>
        </div>
      </div>

      <div class="clients-actions">
        <button class="clients-submit-btn" type="submit">حفظ العميل</button>
        <a class="clients-cancel-btn" href="<?= h(u('clients/index.php')) ?>">إلغاء</a>
      </div>
    </form>
  </div>
</div>

<?php
render_layout_end();
?>