<?php
/**
 * ไฟล์เชื่อมต่อฐานข้อมูลด้วย PDO
 * รองรับทั้ง XAMPP ในเครื่อง และ Web Hosting ของวิทยาลัย (webapp69.cm.in.th)
 */

date_default_timezone_set('Asia/Bangkok');

// ตรวจสอบอัตโนมัติว่ารันบนเครื่อง Localhost (XAMPP) หรือบนเซิร์ฟเวอร์วิทยาลัย
$is_local = in_array($_SERVER['HTTP_HOST'] ?? '', ['localhost', '127.0.0.1']) || strpos($_SERVER['HTTP_HOST'] ?? '', '192.168.') !== false;

if ($is_local) {
    // สำหรับเครื่องตัวเอง (Localhost / XAMPP)
    $host = '127.0.0.1';
    $db   = 'preorder_db';
    $user = 'root';
    $pass = '';
    $charset = 'utf8mb4';
} else {
    // สำหรับโฮสต์ติ้งของวิทยาลัย (webapp69.cm.in.th)
    $host = 'localhost';
    $db   = 'shop69319090001';
    $user = 'u69319090001';
    $pass = '@6901';
    $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);
    
    // ตรวจสอบว่ามีตารางสินค้าหรือไม่ ถ้ายังไม่มีให้ดึงโครงสร้างตารางจาก schema.sql มาสร้างอัตโนมัติ
    $tableCheck = $pdo->query("SHOW TABLES LIKE 'products'");
    $needsReset = ($tableCheck->rowCount() === 0);

    if ($needsReset) {
        $schemaPath = __DIR__ . '/schema.sql';
        if (file_exists($schemaPath)) {
            $sql = file_get_contents($schemaPath);
            // ตัดคำสั่ง CREATE DATABASE และ USE ออก เพื่อให้ใช้ฐานข้อมูลของโฮสติ้งได้ตรงๆ โดยไม่ติด Permission
            $sql = preg_replace('/CREATE DATABASE.*?;/i', '', $sql);
            $sql = preg_replace('/USE `.*?`;/i', '', $sql);
            $pdo->exec($sql);
        }
    }

    // สร้างตาราง users สำหรับสมาชิกลูกค้า (หากยังไม่มี)
    $pdo->exec("CREATE TABLE IF NOT EXISTS `users` (
        `id` INT AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR(255) NOT NULL COMMENT 'ชื่อ-นามสกุล',
        `phone` VARCHAR(50) NOT NULL UNIQUE COMMENT 'เบอร์โทรศัพท์ (ใช้เข้าระบบได้)',
        `email` VARCHAR(191) NULL UNIQUE COMMENT 'อีเมล',
        `password` VARCHAR(255) NOT NULL COMMENT 'รหัสผ่าน Bcrypt',
        `address` TEXT NULL COMMENT 'ที่อยู่จัดส่งเริ่มต้น',
        `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");

    // ตรวจสอบและเพิ่มคอลัมน์ user_id ใน bookings
    $bookingUserColCheck = $pdo->query("SHOW COLUMNS FROM `bookings` LIKE 'user_id'");
    if ($bookingUserColCheck->rowCount() === 0) {
        $pdo->exec("ALTER TABLE `bookings` ADD COLUMN `user_id` INT NULL AFTER `id`");
    }

    // ตรวจสอบและเพิ่มคอลัมน์ category ใน products
    $productCategoryColCheck = $pdo->query("SHOW COLUMNS FROM `products` LIKE 'category'");
    if ($productCategoryColCheck->rowCount() === 0) {
        $pdo->exec("ALTER TABLE `products` ADD COLUMN `category` VARCHAR(100) NOT NULL DEFAULT 'ทั่วไป' AFTER `name`");
    }

    // ตรวจสอบและเพิ่มคอลัมน์ payment_method ใน bookings (ถ้าสร้างตารางไว้ก่อนหน้า)
    $pmColCheck = $pdo->query("SHOW COLUMNS FROM `bookings` LIKE 'payment_method'");
    if ($pmColCheck->rowCount() === 0) {
        $pdo->exec("ALTER TABLE `bookings` ADD COLUMN `payment_method` VARCHAR(50) NOT NULL DEFAULT 'Bank Transfer' AFTER `slip_image_url`");
    }
} catch (\PDOException $e) {
    die("เชื่อมต่อฐานข้อมูลล้มเหลว: " . $e->getMessage());
}
