-- Migration: chi nhánh và giáo trình giảng dạy
-- An toàn dữ liệu:
--   * Không UPDATE hoặc DELETE bất kỳ bản ghi lớp/học viên nào.
--   * Các chi nhánh cũ được seed đúng ID đang lưu tại class_tb.branch.
--   * Có thể chạy lại: dữ liệu branch đã tồn tại được giữ nguyên.

CREATE TABLE IF NOT EXISTS `branch_tb` (
    `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `code` VARCHAR(50) NOT NULL,
    `name` VARCHAR(150) NOT NULL,
    `address` VARCHAR(255) NULL DEFAULT NULL,
    `phone` VARCHAR(30) NULL DEFAULT NULL,
    `status` TINYINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '1: hoạt động, 0: ngừng hoạt động',
    `sort_order` INT UNSIGNED NOT NULL DEFAULT 0,
    `date_created` DATETIME NULL DEFAULT NULL,
    `date_updated` DATETIME NULL DEFAULT NULL,
    `user_created` VARCHAR(150) NULL DEFAULT NULL,
    `user_updated` VARCHAR(150) NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_branch_code` (`code`),
    KEY `idx_branch_status_sort` (`status`, `sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Giữ nguyên tên/mã cũ mà class_tb.branch đang sử dụng.
-- ON DUPLICATE KEY UPDATE id = id nghĩa là nếu đã có chi nhánh thì không ghi đè dữ liệu.
INSERT INTO `branch_tb` (`id`, `code`, `name`, `status`, `sort_order`, `date_created`, `user_created`)
VALUES
    (1, 'CS442',  'CS 442',  1, 1, NOW(), 'migration'),
    (2, 'CS609',  'CS 609',  1, 2, NOW(), 'migration'),
    (3, 'CS618',  'CS 618',  1, 3, NOW(), 'migration'),
    (4, 'CSD5',   'CS D5',   1, 4, NOW(), 'migration'),
    (5, 'Q7',     'Quận 7',  1, 5, NOW(), 'migration'),
    (6, 'GOVAP',  'Gò Vấp',  1, 6, NOW(), 'migration'),
    (7, 'HANOI',  'Hà Nội',  1, 7, NOW(), 'migration'),
    (8, 'DANANG', 'Đà Nẵng', 1, 8, NOW(), 'migration')
ON DUPLICATE KEY UPDATE `id` = `id`;

-- Thêm trường giáo trình theo cách có thể chạy lại. Cột nullable nên lớp cũ không bị thay đổi.
SET @has_curriculum := (
    SELECT COUNT(*)
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'class_tb'
      AND COLUMN_NAME = 'curriculum'
);
SET @curriculum_sql := IF(
    @has_curriculum = 0,
    'ALTER TABLE `class_tb` ADD COLUMN `curriculum` VARCHAR(255) NULL DEFAULT NULL AFTER `name`',
    'SELECT 1'
);
PREPARE curriculum_statement FROM @curriculum_sql;
EXECUTE curriculum_statement;
DEALLOCATE PREPARE curriculum_statement;

-- Chưa tạo foreign key cho class_tb.branch: dữ liệu lịch sử vẫn được giữ nguyên
-- và có thể rà soát đầy đủ trước khi bật ràng buộc này ở một migration sau.
