-- Migration: Create course-related tables
-- สำหรับระบบจัดการคอร์สเรียน
-- ⚠️ ต้องรัน database/install.sql (สร้างตาราง users) ก่อนรันไฟล์นี้

-- Drop existing tables (ลบตารางเก่าถ้ามี - ระวัง! จะลบข้อมูลทั้งหมด)
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS lesson_progress;
DROP TABLE IF EXISTS course_materials;
DROP TABLE IF EXISTS course_lessons;
DROP TABLE IF EXISTS course_sections;
DROP TABLE IF EXISTS course_enrollments;
DROP TABLE IF EXISTS courses;
DROP TABLE IF EXISTS categories;
SET FOREIGN_KEY_CHECKS=1;

-- Table: categories (หมวดหมู่คอร์ส)
CREATE TABLE IF NOT EXISTS categories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category_name VARCHAR(100) NOT NULL,
    category_slug VARCHAR(100) NOT NULL UNIQUE,
    category_description TEXT,
    category_icon VARCHAR(50) DEFAULT NULL COMMENT 'ไอคอน Font Awesome',
    category_image VARCHAR(255) DEFAULT NULL COMMENT 'รูปภาพหมวดหมู่',
    parent_id INT DEFAULT NULL,
    display_order INT DEFAULT 0,
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_slug (category_slug),
    INDEX idx_parent (parent_id),
    INDEX idx_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='หมวดหมู่คอร์ส';

-- เพิ่ม Foreign key สำหรับ parent_id ทีหลัง
ALTER TABLE categories 
ADD CONSTRAINT fk_categories_parent 
FOREIGN KEY (parent_id) REFERENCES categories(id) ON DELETE SET NULL;

-- Table: courses (คอร์สเรียน)
CREATE TABLE IF NOT EXISTS courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    course_title VARCHAR(255) NOT NULL,
    course_slug VARCHAR(255) NOT NULL UNIQUE,
    course_description TEXT,
    course_objectives TEXT COMMENT 'สิ่งที่จะได้เรียนรู้',
    course_requirements TEXT COMMENT 'ความรู้พื้นฐานที่ต้องมี',
    instructor_id BIGINT(20) UNSIGNED NOT NULL COMMENT 'ต้องตรงกับ users.id',
    category_id INT NOT NULL,
    level ENUM('beginner', 'intermediate', 'advanced', 'all') DEFAULT 'beginner',
    language VARCHAR(50) DEFAULT 'th',
    price DECIMAL(10,2) DEFAULT 0.00,
    discount_price DECIMAL(10,2) DEFAULT NULL,
    thumbnail VARCHAR(255) DEFAULT NULL,
    preview_video VARCHAR(255) DEFAULT NULL,
    duration_hours INT DEFAULT 0 COMMENT 'ระยะเวลารวม (ชั่วโมง)',
    total_lessons INT DEFAULT 0 COMMENT 'จำนวนบทเรียนทั้งหมด',
    total_students INT DEFAULT 0 COMMENT 'จำนวนนักเรียนที่ลงทะเบียน',
    average_rating DECIMAL(3,2) DEFAULT 0.00,
    total_reviews INT DEFAULT 0,
    status ENUM('draft', 'pending', 'published', 'archived') DEFAULT 'draft',
    is_featured TINYINT(1) DEFAULT 0 COMMENT 'คอร์สแนะนำ',
    published_at TIMESTAMP NULL DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_slug (course_slug),
    INDEX idx_instructor (instructor_id),
    INDEX idx_category (category_id),
    INDEX idx_status (status),
    INDEX idx_featured (is_featured),
    INDEX idx_price (price)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='คอร์สเรียน';

-- เพิ่ม Foreign keys ทีหลัง (หลังจากสร้างตารางเสร็จ)
ALTER TABLE courses 
ADD CONSTRAINT fk_courses_instructor 
FOREIGN KEY (instructor_id) REFERENCES users(id) ON DELETE CASCADE;

ALTER TABLE courses 
ADD CONSTRAINT fk_courses_category 
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE RESTRICT;

-- Table: course_sections (บท/หัวข้อหลัก)
CREATE TABLE IF NOT EXISTS course_sections (
    id INT AUTO_INCREMENT PRIMARY KEY,
    course_id INT NOT NULL,
    section_title VARCHAR(255) NOT NULL,
    section_description TEXT,
    section_order INT DEFAULT 0,
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE,
    INDEX idx_course (course_id),
    INDEX idx_order (section_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='บท/หัวข้อหลักของคอร์ส';

-- Table: course_lessons (บทเรียน)
CREATE TABLE IF NOT EXISTS course_lessons (
    id INT AUTO_INCREMENT PRIMARY KEY,
    section_id INT NOT NULL,
    lesson_title VARCHAR(255) NOT NULL,
    lesson_description TEXT,
    lesson_type ENUM('video', 'article', 'quiz', 'assignment', 'file') DEFAULT 'video',
    content_url VARCHAR(255) DEFAULT NULL COMMENT 'URL ของวิดีโอหรือไฟล์',
    content_text LONGTEXT DEFAULT NULL COMMENT 'เนื้อหาแบบข้อความ',
    duration_minutes INT DEFAULT 0,
    lesson_order INT DEFAULT 0,
    is_preview TINYINT(1) DEFAULT 0 COMMENT 'ดูได้ฟรีก่อนซื้อ',
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (section_id) REFERENCES course_sections(id) ON DELETE CASCADE,
    INDEX idx_section (section_id),
    INDEX idx_type (lesson_type),
    INDEX idx_order (lesson_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='บทเรียนในแต่ละบท';

-- Table: course_materials (เอกสาร/ไฟล์แนบ)
CREATE TABLE IF NOT EXISTS course_materials (
    id INT AUTO_INCREMENT PRIMARY KEY,
    lesson_id INT NOT NULL,
    material_title VARCHAR(255) NOT NULL,
    material_type ENUM('pdf', 'doc', 'ppt', 'zip', 'other') DEFAULT 'pdf',
    file_path VARCHAR(255) NOT NULL,
    file_size INT DEFAULT 0 COMMENT 'ขนาดไฟล์ (bytes)',
    download_count INT DEFAULT 0,
    is_active TINYINT(1) DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (lesson_id) REFERENCES course_lessons(id) ON DELETE CASCADE,
    INDEX idx_lesson (lesson_id),
    INDEX idx_type (material_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='เอกสารประกอบการเรียน';

-- Table: course_enrollments (การลงทะเบียนเรียน)
CREATE TABLE IF NOT EXISTS course_enrollments (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id BIGINT(20) UNSIGNED NOT NULL COMMENT 'ต้องตรงกับ users.id',
    course_id INT NOT NULL,
    enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    progress DECIMAL(5,2) DEFAULT 0.00 COMMENT 'ความคืบหน้า %',
    completed_lessons INT DEFAULT 0,
    last_accessed_at TIMESTAMP NULL DEFAULT NULL,
    completed_at TIMESTAMP NULL DEFAULT NULL,
    certificate_issued TINYINT(1) DEFAULT 0,
    certificate_number VARCHAR(50) DEFAULT NULL,
    UNIQUE KEY unique_enrollment (user_id, course_id),
    INDEX idx_user (user_id),
    INDEX idx_course (course_id),
    INDEX idx_progress (progress)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='การลงทะเบียนเรียน';

-- เพิ่ม Foreign keys สำหรับ course_enrollments
ALTER TABLE course_enrollments 
ADD CONSTRAINT fk_enrollments_user 
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

ALTER TABLE course_enrollments 
ADD CONSTRAINT fk_enrollments_course 
FOREIGN KEY (course_id) REFERENCES courses(id) ON DELETE CASCADE;

-- Table: lesson_progress (ความคืบหน้าการเรียนแต่ละบท)
CREATE TABLE IF NOT EXISTS lesson_progress (
    id INT AUTO_INCREMENT PRIMARY KEY,
    enrollment_id INT NOT NULL,
    lesson_id INT NOT NULL,
    is_completed TINYINT(1) DEFAULT 0,
    watch_duration INT DEFAULT 0 COMMENT 'เวลาที่ดูไปแล้ว (วินาที)',
    completed_at TIMESTAMP NULL DEFAULT NULL,
    last_position INT DEFAULT 0 COMMENT 'ตำแหน่งที่หยุดดู (วินาที)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (enrollment_id) REFERENCES course_enrollments(id) ON DELETE CASCADE,
    FOREIGN KEY (lesson_id) REFERENCES course_lessons(id) ON DELETE CASCADE,
    UNIQUE KEY unique_progress (enrollment_id, lesson_id),
    INDEX idx_enrollment (enrollment_id),
    INDEX idx_lesson (lesson_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='ความคืบหน้าการเรียนแต่ละบท';

-- Insert default categories
INSERT INTO categories (category_name, category_slug, category_description, category_icon, display_order) VALUES
('การพัฒนาเว็บไซต์', 'web-development', 'เรียนรู้การสร้างเว็บไซต์และเว็บแอปพลิเคชัน', 'fa-code', 1),
('การออกแบบกราฟิก', 'graphic-design', 'ออกแบบกราฟิกและสื่อดิจิทัล', 'fa-palette', 2),
('การตลาดดิจิทัล', 'digital-marketing', 'เรียนรู้การตลาดออนไลน์และโซเชียลมีเดีย', 'fa-bullhorn', 3),
('ธุรกิจและการจัดการ', 'business-management', 'หลักสูตรธุรกิจและการบริหารจัดการ', 'fa-briefcase', 4),
('ภาษา', 'languages', 'เรียนภาษาต่างประเทศ', 'fa-language', 5),
('การพัฒนาตนเอง', 'personal-development', 'พัฒนาทักษะและคุณภาพชีวิต', 'fa-user-graduate', 6)
ON DUPLICATE KEY UPDATE updated_at = CURRENT_TIMESTAMP;
