-- ==========================================
-- SCRIPT TẠO BẢNG HỆ THỐNG VÉ SÁT HẠCH LÁI XE
-- Tương thích hoàn toàn với MySQL / MariaDB
-- ==========================================

-- Tạo Database
CREATE DATABASE IF NOT EXISTS app_ticket CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE app_ticket;

-- 1. Bảng lưu thông tin Người dùng / Quản trị viên (users)
CREATE TABLE IF NOT EXISTS users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL, -- Mật khẩu được mã hóa bcrypt
  name VARCHAR(100) NOT NULL,
  role VARCHAR(20) NOT NULL DEFAULT 'staff', -- admin, staff
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- 2. Bảng quản lý Xe sát hạch (vehicles)
CREATE TABLE IF NOT EXISTS vehicles (
  id INT PRIMARY KEY AUTO_INCREMENT,
  plate_number VARCHAR(20) UNIQUE NOT NULL, -- Biển số xe
  type VARCHAR(20) NOT NULL, -- Phân loại: D (Khách), B_MANUAL (Số sàn B), B_AUTO (Tự động B), C (Xe tải)
  name VARCHAR(100) NOT NULL, -- Tên/Dòng xe
  status VARCHAR(20) NOT NULL DEFAULT 'available', -- Trạng thái: available (rảnh), in_use (đang chạy), maintenance (bảo dưỡng)
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- 3. Bảng quản lý Vé thuê xe (tickets)
CREATE TABLE IF NOT EXISTS tickets (
  id INT PRIMARY KEY AUTO_INCREMENT,
  ticket_code VARCHAR(30) UNIQUE NOT NULL, -- Mã vé tự động sinh (VD: VE-20260531-0001)
  student_name VARCHAR(100) NOT NULL, -- Tên học viên
  student_phone VARCHAR(20), -- SĐT học viên
  vehicle_id INT NOT NULL, -- Xe thuê liên kết bảng vehicles
  start_time DATETIME NOT NULL, -- Giờ bắt đầu thuê
  end_time DATETIME NOT NULL, -- Giờ kết thúc ca thuê
  duration_minutes INT NOT NULL, -- Số phút thuê thực tế
  amount INT NOT NULL, -- Số tiền nộp (VND)
  status VARCHAR(20) NOT NULL DEFAULT 'active', -- Trạng thái: active (đang chạy), completed (đã hoàn thành), cancelled (đã hủy)
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB;

-- ==========================================
-- CHÈN DỮ LIỆU MẪU BAN ĐẦU (SEED DATA)
-- ==========================================

-- Seed tài khoản Admin mặc định
-- Mật khẩu mặc định: admin123 (đã được mã hóa bằng bcrypt với 10 rounds)
INSERT INTO users (username, password, name, role)
VALUES (
  'admin', 
  '$2a$10$wYQjGZ5TkyhS/bC.T/zDyeT8NnS8iGvhX80gqK96dZ6o6.Q.yM6b.', -- bcrypt hash of 'admin123'
  'Quản trị viên', 
  'admin'
) ON DUPLICATE KEY UPDATE username=username;

-- Seed hạm đội xe ban đầu
INSERT INTO vehicles (plate_number, type, name, status) VALUES
-- Xe khách hạng D
('29D-123.45', 'D', 'Hyundai County 29 Chỗ', 'available'),
('29D-678.90', 'D', 'Samco Felix 29 Chỗ', 'available'),

-- Xe oto số sàn B
('30F-111.22', 'B_MANUAL', 'Toyota Vios 1.5E (Số sàn)', 'available'),
('30F-333.44', 'B_MANUAL', 'Hyundai Accent MT (Số sàn)', 'available'),
('30F-555.66', 'B_MANUAL', 'Kia Soluto MT (Số sàn)', 'available'),

-- Xe oto số tự động B
('30G-222.33', 'B_AUTO', 'Toyota Vios 1.5G (Tự động)', 'available'),
('30G-444.55', 'B_AUTO', 'Hyundai Accent AT (Tự động)', 'available'),
('30G-666.77', 'B_AUTO', 'Honda City L (Tự động)', 'available'),

-- Xe tải C
('29C-999.11', 'C', 'Isuzu NPR400 3.5 Tấn', 'available'),
('29C-999.22', 'C', 'Hino 300 Series 3.5 Tấn', 'available')
ON DUPLICATE KEY UPDATE plate_number=plate_number;
