<?php
// ============================================================
// Database Connection File (db.php)
// Using PDO with MariaDB / MySQL
// ============================================================

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

$host = 'localhost';
$db   = 'shop_db';
$user = 'root';
$pass = ''; // รหัสผ่านฐานข้อมูล XAMPP ค่าเริ่มต้นคือค่าว่าง
$charset = 'utf8mb4';

$dsn = "mysql:host={$host};dbname={$db};charset={$charset}";

$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    // หากข้อผิดพลาดคือไม่พบฐานข้อมูล shop_db (Error code 1049) ให้พยายามสร้างอัตโนมัติ
    if ($e->getCode() == 1049 || strpos($e->getMessage(), 'Unknown database') !== false) {
        try {
            $pdo_init = new PDO("mysql:host={$host};charset={$charset}", $user, $pass, $options);
            $schema_file = __DIR__ . '/schema.sql';
            if (file_exists($schema_file)) {
                $sql = file_get_contents($schema_file);
                $pdo_init->exec($sql);
            } else {
                $pdo_init->exec("CREATE DATABASE IF NOT EXISTS `{$db}` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");
            }
            $pdo = new PDO($dsn, $user, $pass, $options);
        } catch (\PDOException $ex) {
            die("เกิดข้อผิดพลาดในการสร้างฐานข้อมูลอัตโนมัติ: " . htmlspecialchars($ex->getMessage()));
        }
    } else {
        die("เกิดข้อผิดพลาดในการเชื่อมต่อฐานข้อมูล: " . htmlspecialchars($e->getMessage()));
    }
}

// ------------------------------------------------------------
// ระบบจดจำการเข้าสู่ระบบอัตโนมัติ (Remember Me Auto Login)
// ------------------------------------------------------------
if (!isset($_SESSION['user_id']) && isset($_COOKIE['remember_token'])) {
    $token_data = explode(':', $_COOKIE['remember_token']);
    if (count($token_data) === 2) {
        list($c_user_id, $c_hash) = $token_data;
        $c_user_id = (int)$c_user_id;

        $stmt_rem = $pdo->prepare("SELECT * FROM users WHERE id = ? LIMIT 1");
        $stmt_rem->execute([$c_user_id]);
        $rem_user = $stmt_rem->fetch();

        if ($rem_user && hash_equals($c_hash, md5($rem_user['password'] . 'techshop_secure_salt'))) {
            session_regenerate_id(true);
            $_SESSION['user_id']  = $rem_user['id'];
            $_SESSION['username'] = $rem_user['username'];
            $_SESSION['fullname'] = $rem_user['fullname'];
            $_SESSION['email']    = $rem_user['email'];
            $_SESSION['role']     = $rem_user['role'] ?? 'user';
        }
    }
}



// ซิงค์สิทธิ์ผู้ใช้งาน (Role) จากฐานข้อมูลให้อัปเดตล่าสุดตลอดเวลา
if (isset($_SESSION['user_id'])) {
    $stmt_sync = $pdo->prepare("SELECT role, fullname, email FROM users WHERE id = ?");
    $stmt_sync->execute([$_SESSION['user_id']]);
    $user_sync = $stmt_sync->fetch();
    if ($user_sync) {
        $_SESSION['role']     = $user_sync['role'];
        $_SESSION['fullname'] = $user_sync['fullname'];
        $_SESSION['email']    = $user_sync['email'];
    }
}

// ------------------------------------------------------------
// Helper Functions (ฟังก์ชันช่วยเหลือกลาง)
// ------------------------------------------------------------

/**
 * ตรวจสอบว่าผู้ใช้งานล็อกอินหรือยัง
 */
function is_logged_in() {
    return isset($_SESSION['user_id']);
}

/**
 * ตรวจสอบว่าผู้ใช้งานปัจจุบันเป็นแอดมิน/ผู้ขายหรือไม่
 */
function is_admin() {
    return is_logged_in() && isset($_SESSION['role']) && $_SESSION['role'] === 'admin';
}

/**
 * ดึงข้อมูลผู้ใช้งานปัจจุบันที่ล็อกอิน
 */
function current_user() {
    return [
        'id'       => $_SESSION['user_id'] ?? null,
        'username' => $_SESSION['username'] ?? null,
        'fullname' => $_SESSION['fullname'] ?? null,
        'email'    => $_SESSION['email'] ?? null,
        'role'     => $_SESSION['role'] ?? 'user',
    ];
}

/**
 * คำนวณจำนวนสินค้าทั้งหมดในตะกร้า
 */
function get_cart_count() {
    if (!isset($_SESSION['cart']) || empty($_SESSION['cart'])) {
        return 0;
    }
    $total = 0;
    foreach ($_SESSION['cart'] as $item) {
        if (is_array($item)) {
            $total += $item['quantity'];
        } else {
            $total += (int)$item;
        }
    }
    return $total;
}

/**
 * แปลงตัวเลขเป็นรูปแบบเงินบาท (฿ X,XXX.XX)
 */
function format_price($amount) {
    return '฿' . number_format($amount, 2);
}

/**
 * ฟังก์ชันช่วยแปลงชื่อสถานะคำสั่งซื้อเป็นภาษาไทยและ Badge สวยงาม
 */
function render_order_status_badge($status) {
    switch ($status) {
        case 'pending':
            return '<span class="badge bg-warning text-dark"><i class="fa-solid fa-clock me-1"></i>รอจัดส่ง</span>';
        case 'shipping':
            return '<span class="badge bg-primary"><i class="fa-solid fa-truck-fast me-1"></i>กำลังจัดส่ง</span>';
        case 'delivered':
            return '<span class="badge bg-success"><i class="fa-solid fa-circle-check me-1"></i>จัดส่งสำเร็จ</span>';
        case 'cancelled':
            return '<span class="badge bg-danger"><i class="fa-solid fa-ban me-1"></i>ยกเลิกแล้ว</span>';
        default:
            return '<span class="badge bg-secondary">' . htmlspecialchars($status) . '</span>';
    }
}

/**
 * คืนค่า URL รูปภาพสินค้า ค้นหาจากโฟลเดอร์ assets/images/ และโฟลเดอร์ รูป/
 */
function get_product_image_url($image_name) {
    if (empty($image_name)) {
        return 'assets/images/default.jpg';
    }
    
    // ตรวจสอบในโฟลเดอร์ assets/images/
    if (file_exists(__DIR__ . '/assets/images/' . $image_name)) {
        return 'assets/images/' . rawurlencode($image_name);
    }
    
    // ตรวจสอบในโฟลเดอร์ รูป/
    if (file_exists(__DIR__ . '/รูป/' . $image_name)) {
        return 'รูป/' . rawurlencode($image_name);
    }

    return 'assets/images/default.jpg';
}
