<?php
// admin/admin_user_profile_lib.php
// أدوات ملف مستخدم الإدارة: الحقول الشخصية + الصور الآمنة.

if (!function_exists('ua_admin_profile_columns')) {
  function ua_admin_profile_columns(): array {
    return [
      'email'               => "VARCHAR(120) NULL",
      'phone'               => "VARCHAR(40) NULL",
      'phone2'              => "VARCHAR(40) NULL",
      'address'             => "VARCHAR(255) NULL",
      'job_title'           => "VARCHAR(120) NULL",
      'identity_no'         => "VARCHAR(80) NULL",
      'avatar_path'               => "VARCHAR(255) NULL",
      'identity_image_path'       => "VARCHAR(255) NULL", // legacy/front fallback
      'identity_front_image_path' => "VARCHAR(255) NULL",
      'identity_back_image_path'  => "VARCHAR(255) NULL",
      'profile_notes'             => "TEXT NULL",
      'updated_at'          => "DATETIME NULL",
    ];
  }
}

if (!function_exists('ua_ensure_admin_profile_columns')) {
  function ua_ensure_admin_profile_columns(mysqli $conn): void {
    if (!function_exists('col_exists')) require_once __DIR__ . '/helpers.php';
    foreach (ua_admin_profile_columns() as $col => $def) {
      try {
        if (!col_exists($conn, 'admin_users', $col)) {
          $conn->query("ALTER TABLE admin_users ADD COLUMN `$col` $def");
        }
      } catch (Throwable $e) {}
    }
  }
}

if (!function_exists('ua_admin_upload_dir')) {
  function ua_admin_upload_dir(): string {
    $dir = __DIR__ . '/uploads/admin_users';
    if (!is_dir($dir)) @mkdir($dir, 0775, true);
    return $dir;
  }
}

if (!function_exists('ua_admin_safe_existing_file')) {
  function ua_admin_safe_existing_file(string $rel): string {
    $rel = str_replace(['\\', "\0"], ['/', ''], trim($rel));
    $rel = ltrim($rel, '/');
    if ($rel === '' || strpos($rel, '..') !== false) return '';
    if (!preg_match('~^uploads/admin_users/[a-zA-Z0-9_\-\.]+$~', $rel)) return '';
    return $rel;
  }
}

if (!function_exists('ua_admin_public_image_url')) {
  function ua_admin_public_image_url(?string $rel): string {
    $rel = ua_admin_safe_existing_file((string)$rel);
    if ($rel === '') return '';
    $abs = __DIR__ . '/' . $rel;
    return is_file($abs) ? $rel : '';
  }
}

if (!function_exists('ua_admin_upload_image')) {
  function ua_admin_upload_image(string $field, int $uid, string $prefix, ?string &$err): string {
    if (empty($_FILES[$field]) || !is_array($_FILES[$field])) return '';
    $f = $_FILES[$field];
    $code = (int)($f['error'] ?? UPLOAD_ERR_NO_FILE);
    if ($code === UPLOAD_ERR_NO_FILE) return '';
    if ($code !== UPLOAD_ERR_OK) {
      $err = 'فشل رفع الصورة، رمز الخطأ: ' . $code;
      return '';
    }

    $size = (int)($f['size'] ?? 0);
    if ($size <= 0 || $size > 4 * 1024 * 1024) {
      $err = 'حجم الصورة غير صالح. الحد الأقصى 4MB.';
      return '';
    }

    $tmp = (string)($f['tmp_name'] ?? '');
    if ($tmp === '' || !is_uploaded_file($tmp)) {
      $err = 'ملف الرفع غير صالح.';
      return '';
    }

    $img = @getimagesize($tmp);
    if (!$img || empty($img['mime'])) {
      $err = 'الملف المرفوع ليس صورة صالحة.';
      return '';
    }

    $mime = strtolower((string)$img['mime']);
    $map = [
      'image/jpeg' => 'jpg',
      'image/png'  => 'png',
      'image/webp' => 'webp',
    ];
    if (!isset($map[$mime])) {
      $err = 'نوع الصورة غير مدعوم. استخدم JPG أو PNG أو WEBP.';
      return '';
    }

    $dir = ua_admin_upload_dir();
    if (!is_dir($dir) || !is_writable($dir)) {
      $err = 'مجلد رفع صور المستخدمين غير قابل للكتابة.';
      return '';
    }

    $prefix = preg_replace('/[^a-zA-Z0-9_\-]/', '', $prefix);
    if ($prefix === '') $prefix = 'img';
    $name = $prefix . '_u' . (int)$uid . '_' . date('YmdHis') . '_' . bin2hex(random_bytes(4)) . '.' . $map[$mime];
    $dest = $dir . '/' . $name;
    if (!move_uploaded_file($tmp, $dest)) {
      $err = 'تعذر حفظ الصورة على الخادم.';
      return '';
    }
    @chmod($dest, 0664);
    return 'uploads/admin_users/' . $name;
  }
}

if (!function_exists('ua_admin_delete_old_image')) {
  function ua_admin_delete_old_image(?string $oldRel, string $newRel): void {
    $oldRel = ua_admin_safe_existing_file((string)$oldRel);
    if ($oldRel === '') return;
    if ($newRel !== '' && $oldRel === $newRel) return;
    $abs = __DIR__ . '/' . $oldRel;
    if (is_file($abs)) @unlink($abs);
  }
}

if (!function_exists('ua_admin_fetch_user')) {
  function ua_admin_fetch_user(mysqli $conn, int $uid): ?array {
    $uid = (int)$uid;
    if ($uid <= 0) return null;
    $q = $conn->query("SELECT * FROM admin_users WHERE id=$uid LIMIT 1");
    return ($q && $q->num_rows) ? $q->fetch_assoc() : null;
  }
}

if (!function_exists('ua_admin_profile_set_session')) {
  function ua_admin_profile_set_session(array $row): void {
    if (session_status() === PHP_SESSION_NONE) @session_start();
    $display = trim((string)($row['full_name'] ?? ''));
    if ($display === '') $display = trim((string)($row['username'] ?? ''));
    if ($display !== '') $_SESSION['admin_username'] = $display;
    if (!empty($row['username'])) $_SESSION['admin_user'] = (string)$row['username'];
    if (!empty($row['avatar_path'])) {
      $_SESSION['admin_avatar'] = (string)$row['avatar_path'];
    } else {
      unset($_SESSION['admin_avatar']);
    }
  }
}
