-- FFApp Database Schema (consolidated)
SET NAMES utf8mb4;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;

CREATE DATABASE IF NOT EXISTS ffapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE ffapp_db;

-- Drop existing tables (respect dependency order)
DROP TABLE IF EXISTS purchase_history;
DROP TABLE IF EXISTS story_reads;
DROP TABLE IF EXISTS spin_history;
DROP TABLE IF EXISTS withdrawals;
DROP TABLE IF EXISTS user_quests;
DROP TABLE IF EXISTS user_balance;
DROP TABLE IF EXISTS user_spins;
DROP TABLE IF EXISTS stories;
DROP TABLE IF EXISTS users;

-- Users
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL,
    is_admin TINYINT(1) DEFAULT 0,
    name VARCHAR(100),
    token VARCHAR(64),
    token_expiry DATETIME,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_token (token),
    INDEX idx_username (username),
    INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Spins
CREATE TABLE user_spins (
    user_id INT PRIMARY KEY,
    spin_count INT DEFAULT 5,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE user_balance (
    user_id INT PRIMARY KEY,
    diamond INT DEFAULT 0,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE user_quests (
    user_id INT PRIMARY KEY,
    current_quest INT DEFAULT 1,
    completed_quests JSON,
    quest_order JSON,
    daily_reset DATETIME,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE spin_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    result INT NOT NULL,
    reward INT NOT NULL,
    spin_count_after INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_spin_user (user_id),
    INDEX idx_spin_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Withdrawals
CREATE TABLE withdrawals (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    game_id VARCHAR(50) NOT NULL,
    amount INT NOT NULL,
    status ENUM('pending', 'completed', 'rejected') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_withdraw_user (user_id),
    INDEX idx_withdraw_status (status),
    INDEX idx_withdraw_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Stories
CREATE TABLE stories (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    description TEXT,
    content LONGTEXT,
    image VARCHAR(500),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_story_updated (updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE story_reads (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    story_id INT NOT NULL,
    read_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY unique_user_story (user_id, story_id),
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE,
    INDEX idx_reads_user (user_id),
    INDEX idx_reads_story (story_id),
    INDEX idx_reads_at (read_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Purchases
CREATE TABLE purchase_history (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    product_id VARCHAR(50) NOT NULL,
    order_id VARCHAR(255) NOT NULL,
    purchase_token TEXT NOT NULL,
    spins INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    UNIQUE KEY unique_order_user (order_id, user_id),
    INDEX idx_purchase_user (user_id),
    INDEX idx_purchase_product (product_id),
    INDEX idx_purchase_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

SET foreign_key_checks = 1;

-- Demo data: 10 stories with HTML content
INSERT INTO stories (title, description, content, image) VALUES
('Hành Trình Mặt Trời', 'Khám phá hành trình vòng quanh hệ mặt trời.', '<h2>Khởi hành</h2><p>Chúng tôi rời khỏi Trái Đất vào một buổi sáng tháng sáu, khi ánh bình minh phủ lên cổng vũ trụ.</p><h3>Điểm đến</h3><p>Hệ mặt trời mở ra với vô vàn điều kỳ diệu từ Sao Hỏa đỏ rực đến Sao Thổ với vành đai huyền thoại.</p>', 'https://images.unsplash.com/photo-1446776811953-b23d57bd21aa'),
('Thành Phố Trên Mây', 'Câu chuyện về thành phố bay giữa tầng mây trắng.', '<p>Trên đỉnh những đám mây trắng xóa, một thành phố lớn tồn tại thầm lặng với công nghệ khí động học tiên tiến.</p><p>Người dân gọi nơi đây là <strong>Aerilon</strong>, nơi mọi con đường đều dẫn ra rìa mây mù.</p>', 'https://images.unsplash.com/photo-1469474968028-56623f02e42e'),
('Hộp Nhạc Thời Gian', 'Một chiếc hộp nhạc mở ra ký ức của quá khứ.', '<p>Mỗi lần xoay chiếc chìa khóa bằng bạc, những khung hình quá khứ lại hiện về dưới ánh sáng dịu dàng.</p><p>Âm thanh vang lên là lời nhắc nhở rằng thời gian chỉ lắng lại khi trái tim chịu lắng nghe.</p>', 'https://images.unsplash.com/photo-1518770660439-4636190af475'),
('Mật Thư Biển Sâu', 'Bức thư cổ trôi dạt từ đại dương.', '<p>Một chai thủy tinh phủ đầy hàu trôi dạt vào bờ biển, bên trong là lá thư viết bằng mực tím đã phai.</p><p>Nội dung kể về chuyến hải trình cuối cùng của con tàu <em>Song Ngư</em> năm 1893.</p>', 'https://images.unsplash.com/photo-1507525428034-b723cf961d3e'),
('Đêm Hội Đom Đóm', 'Ngọn đồi rực sáng bởi những ánh đom đóm.', '<p>Đêm hạ chí, chúng tôi leo lên ngọn đồi phía bắc để tham dự lễ hội ánh sáng của đom đóm.</p><p>Khi màn đêm buông xuống, cả khu rừng bừng sáng như dải ngân hà đáp xuống mặt đất.</p>', 'https://images.unsplash.com/photo-1433086966358-54859d0ed716'),
('Nhật Ký Trạm Phía Bắc', 'Cuộc sống tại trạm nghiên cứu vùng Bắc Cực.', '<p>Nhiệt độ âm 40 độ C, gió rít xuyên qua từng khe cửa, nhưng đội nghiên cứu vẫn cặm cụi ghi chép từng số liệu.</p><p>Họ tin rằng băng giá chứa đựng câu trả lời cho tương lai khí hậu Trái Đất.</p>', 'https://images.unsplash.com/photo-1419242902214-272b3f66ee7a'),
('Cánh Rừng Kể Chuyện', 'Lắng nghe tiếng thì thầm của cây cỏ.', '<p>Mỗi cây cổ thụ là một cuốn sử thi, tán lá rung động thuật lại những mùa hè, mùa đông đã đi qua.</p><p>Người già trong làng bảo rằng ai chịu lắng nghe sẽ tìm thấy con đường trở về nhà.</p>', 'https://images.unsplash.com/photo-1501785888041-af3ef285b470'),
('Lá Thư Từ Tương Lai', 'Một ngày nhận được thư gửi từ chính mình.', '<p>Bức thư đóng dấu năm 2045 với nét chữ quen thuộc khiến tôi sững sờ.</p><p>Trong thư, tôi viết cho chính mình những lời khuyên về sự kiên nhẫn và lòng can đảm.</p>', 'https://images.unsplash.com/photo-1529333166437-7750a6dd5a70'),
('Quán Cà Phê Bất Tận', 'Quán cà phê tồn tại ở mọi thành phố.', '<p>Ở góc phố nào tôi đến, cũng có một quán cà phê mang tên <strong>Infinity</strong>.</p><p>Người pha chế luôn nhớ chính xác thức uống tôi gọi, dù tôi chưa từng gặp họ lần nào.</p>', 'https://images.unsplash.com/photo-1509042239860-f550ce710b93'),
('Bản Giao Hưởng Mưa', 'Âm nhạc được viết bằng những giọt mưa.', '<p>Nhạc sĩ già ngồi bên hiên nhà, lấy những dao động của mưa rơi làm nốt nhạc.</p><p>Bản giao hưởng kỳ lạ ấy khiến người nghe cảm thấy trái tim mình được gột rửa.</p>', 'https://images.unsplash.com/photo-1505678261036-a3fcc5e884ee');

