-- Создание базы данных, если она не существует
CREATE DATABASE IF NOT EXISTS Reminder;

USE Reminder;

-- Таблица пользователей
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    user_id VARCHAR(255) NOT NULL UNIQUE,  -- Переименовали telegram_user_id в user_id
	referred_by VARCHAR(255) DEFAULT NULL,
	role VARCHAR(50) DEFAULT 'user',
	timezone VARCHAR(255) DEFAULT NULL,
	helper TINYINT(1) DEFAULT 1,
	promode TINYINT(1) DEFAULT 0,
	model VARCHAR(50) DEFAULT 'o3-mini',
	is_active TINYINT(1) DEFAULT 1 NOT NULL,
    is_blocked TINYINT(1) DEFAULT 0 NOT NULL,
    expecting_reminder_input TINYINT(1) DEFAULT 0,  -- Новая колонка для отслеживания ожидания ввода
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS referrals (
    id INT AUTO_INCREMENT PRIMARY KEY,
    referrer_id VARCHAR(255) NOT NULL,
    referred_user_id VARCHAR(255) NOT NULL, 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (referrer_id) REFERENCES users(user_id),
    FOREIGN KEY (referred_user_id) REFERENCES users(user_id)
);

-- Create an index on referred_by for faster lookups
CREATE INDEX idx_referred_by ON users(referred_by);

-- Таблица напоминаний
CREATE TABLE IF NOT EXISTS reminders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL, 
    reminder_text TEXT NOT NULL,
    reminder_date DATETIME NOT NULL,
    sent TINYINT(1) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    CONSTRAINT fk_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE  -- Ссылка на user_id в таблице users
);

-- Таблица обработанных сообщений
CREATE TABLE IF NOT EXISTS processed_messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,  -- Исправил тип на INT для связи с users.id
    message_id BIGINT NOT NULL,  -- Telegram message ID
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(user_id, message_id),  -- Исключаем дублирование по user_id и message_id
    CONSTRAINT fk_processed_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE  -- Связь с таблицей users
);

 
-- Таблица хранения неподтвержденных напоминаний
CREATE TABLE IF NOT EXISTS pending_reminders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,
    reminder_text VARCHAR(255) NOT NULL,
    reminder_date DATETIME NOT NULL,  -- Новая колонка для даты напоминания
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE (user_id)
);

CREATE TABLE IF NOT EXISTS whisper (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,  -- Ссылка на user_id из таблицы users
    last_message TEXT, 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  -- Для отслеживания обновлений
    CONSTRAINT fk_whisper_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- Ссылка на users.user_id
);

CREATE TABLE IF NOT EXISTS tts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL,  -- Ссылка на user_id из таблицы users
    voice VARCHAR(50) DEFAULT 'alloy', 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  -- Для отслеживания обновлений
    CONSTRAINT fk_tts_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- Ссылка на users.user_id
);

CREATE TABLE IF NOT EXISTS themes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL, -- ID пользователя, если используется многопользовательская система
    name VARCHAR(255) NOT NULL, -- Название темы
    stream LONGTEXT NOT NULL, -- JSON с историей сообщений (поток)
	status INT(1) NOT NULL DEFAULT 1,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
 
CREATE TABLE IF NOT EXISTS alerts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    alert_hash VARCHAR(255) NOT NULL UNIQUE, -- Уникальный хеш для проверки дубликатов
    message TEXT NOT NULL, -- Текст уведомления
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Время отправки
);

-- Таблица подписок
CREATE TABLE IF NOT EXISTS subscription (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(255) NOT NULL, 
    plan_type ENUM('standard', 'premium') NOT NULL DEFAULT 'standard', 
    recurring_payment TINYINT(1) NOT NULL DEFAULT 0, -- Рекуррентные платежи (0 - отключены, 1 - включены)
    expiration_date DATETIME DEFAULT NULL, -- Дата окончания подписки (NULL, если безгранично для standard)
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    -- Лимиты для разных моделей ИИ
    limit_o3_mini INT NOT NULL DEFAULT 0,
    limit_GPT_4o_mini INT NOT NULL DEFAULT 0,
    limit_GPT_o1_mini INT NOT NULL DEFAULT 0,
    limit_DALL_E INT NOT NULL DEFAULT 0,
    limit_TTS INT NOT NULL DEFAULT 0,
    limit_Whisper INT NOT NULL DEFAULT 0,
    limit_GPT_4o INT NOT NULL DEFAULT 35,
    
    CONSTRAINT fk_subscription_user_id FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -- Связь с users.user_id
);


