CREATE TABLE IF NOT EXISTS users (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    telegram_id BIGINT UNSIGNED NOT NULL UNIQUE,
    username VARCHAR(64) NULL,
    name_en VARCHAR(80) NULL,
    gender ENUM('M', 'F') NULL,
    age_range VARCHAR(16) NULL,
    state VARCHAR(40) NOT NULL DEFAULT 'NEW',
    ref_code VARCHAR(16) NOT NULL UNIQUE,
    referred_by INT UNSIGNED NULL,
    referral_count INT UNSIGNED NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    last_active_at DATETIME NOT NULL,
    CONSTRAINT fk_users_referred_by FOREIGN KEY (referred_by) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_users_state_gender (state, gender)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS matches (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user1_id INT UNSIGNED NOT NULL,
    user2_id INT UNSIGNED NOT NULL,
    status ENUM('PENDING', 'ACTIVE', 'REJECTED', 'TIMEOUT', 'COMPLETED') NOT NULL DEFAULT 'PENDING',
    requested_to INT UNSIGNED NOT NULL,
    expires_at DATETIME NULL,
    current_question_index TINYINT UNSIGNED NOT NULL DEFAULT 1,
    user1_like TINYINT(1) NULL,
    user2_like TINYINT(1) NULL,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NOT NULL,
    CONSTRAINT fk_matches_user1 FOREIGN KEY (user1_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_matches_user2 FOREIGN KEY (user2_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_matches_requested_to FOREIGN KEY (requested_to) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_matches_status_expires (status, expires_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS questions (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    text VARCHAR(500) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS answers (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    match_id INT UNSIGNED NOT NULL,
    user_id INT UNSIGNED NOT NULL,
    question_id INT UNSIGNED NOT NULL,
    answer_text TEXT NOT NULL,
    created_at DATETIME NOT NULL,
    CONSTRAINT fk_answers_match FOREIGN KEY (match_id) REFERENCES matches(id) ON DELETE CASCADE,
    CONSTRAINT fk_answers_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    CONSTRAINT fk_answers_question FOREIGN KEY (question_id) REFERENCES questions(id) ON DELETE CASCADE,
    UNIQUE KEY uq_answers_unique (match_id, user_id, question_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS support_messages (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    user_id INT UNSIGNED NOT NULL,
    message_text TEXT NOT NULL,
    created_at DATETIME NOT NULL,
    CONSTRAINT fk_support_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO questions (text) VALUES
('خودت را در سه کلمه معرفی کن.'),
('تعریف تو از یک رابطه سالم چیست؟'),
('تفریح مورد علاقه‌ات در آخر هفته چیست؟'),
('ترجیح می‌دهی بیشتر سفر کنی یا در خانه استراحت کنی؟'),
('یک عادت مثبت که به آن افتخار می‌کنی چیست؟'),
('در ارتباط، صداقت مهم‌تر است یا مهربانی؟ چرا؟'),
('چه نوع گفتگوهایی تو را جذب می‌کند؟'),
('یک هدف مهم تو در یک سال آینده چیست؟'),
('چطور با استرس یا اختلاف نظر برخورد می‌کنی؟'),
('به نظرت اولین قرار خوب چه ویژگی‌هایی دارد؟')
ON DUPLICATE KEY UPDATE text = VALUES(text);
