-- SQL скрипт для создания таблицы пользователей
-- Сохраняет все данные о пользователе, передаваемые Telegram через aiogram

CREATE TABLE bot_users (
    -- Основные данные пользователя Telegram
    id NUMBER(19) PRIMARY KEY,                      -- Telegram user ID (64-bit integer)
    first_name VARCHAR2(256) NOT NULL,             -- Имя пользователя
    last_name VARCHAR2(256),                       -- Фамилия пользователя (опционально)
    username VARCHAR2(128),                        -- Username (опционально) 
    language_code VARCHAR2(10),                    -- Код языка (IETF language tag)
    
    -- Флаги статуса пользователя
    is_bot NUMBER(1) DEFAULT 0 NOT NULL,          -- Является ли пользователь ботом
    is_premium NUMBER(1) DEFAULT 0,               -- Telegram Premium пользователь
    added_to_attachment_menu NUMBER(1) DEFAULT 0,  -- Добавил ли бота в меню вложений
    
    -- Системные поля для аудита
    first_interaction_date DATE DEFAULT SYSDATE NOT NULL,  -- Дата первого взаимодействия
    last_interaction_date DATE DEFAULT SYSDATE NOT NULL,   -- Дата последнего взаимодействия
    interaction_count NUMBER(10) DEFAULT 1 NOT NULL,       -- Количество взаимодействий
    
    -- Дополнительные бизнес-поля
    is_active NUMBER(1) DEFAULT 1 NOT NULL,       -- Активен ли пользователь
    is_blocked NUMBER(1) DEFAULT 0 NOT NULL,      -- Заблокирован ли пользователь
    registration_source VARCHAR2(50) DEFAULT 'bot', -- Источник регистрации
    
    -- Финансовые данные
    total_payments NUMBER(10,2) DEFAULT 0,         -- Общая сумма платежей в звездах
    successful_payments_count NUMBER(8) DEFAULT 0, -- Количество успешных платежей
    
    -- Системные поля
    created_at DATE DEFAULT SYSDATE NOT NULL,
    updated_at DATE DEFAULT SYSDATE NOT NULL
);

-- Создание индексов для оптимизации поиска
CREATE INDEX idx_bot_users_username ON bot_users(username);
CREATE INDEX idx_bot_users_language ON bot_users(language_code);
CREATE INDEX idx_bot_users_last_interaction ON bot_users(last_interaction_date);
CREATE INDEX idx_bot_users_is_premium ON bot_users(is_premium);
CREATE INDEX idx_bot_users_created_at ON bot_users(created_at);

-- Создание комментариев к таблице и полям
COMMENT ON TABLE bot_users IS 'Таблица пользователей Telegram бота с полными данными KYC';
COMMENT ON COLUMN bot_users.id IS 'Уникальный идентификатор пользователя Telegram (64-bit)';
COMMENT ON COLUMN bot_users.first_name IS 'Имя пользователя в Telegram';
COMMENT ON COLUMN bot_users.last_name IS 'Фамилия пользователя в Telegram (опционально)';
COMMENT ON COLUMN bot_users.username IS 'Username пользователя в Telegram (опционально)';
COMMENT ON COLUMN bot_users.language_code IS 'Код языка пользователя (IETF language tag)';
COMMENT ON COLUMN bot_users.is_bot IS 'Флаг: является ли пользователь ботом (0/1)';
COMMENT ON COLUMN bot_users.is_premium IS 'Флаг: Telegram Premium пользователь (0/1)';
COMMENT ON COLUMN bot_users.added_to_attachment_menu IS 'Флаг: добавил ли бота в меню вложений (0/1)';
COMMENT ON COLUMN bot_users.first_interaction_date IS 'Дата первого взаимодействия с ботом';
COMMENT ON COLUMN bot_users.last_interaction_date IS 'Дата последнего взаимодействия с ботом';
COMMENT ON COLUMN bot_users.interaction_count IS 'Общее количество взаимодействий с ботом';
COMMENT ON COLUMN bot_users.is_active IS 'Флаг: активен ли пользователь (0/1)';
COMMENT ON COLUMN bot_users.is_blocked IS 'Флаг: заблокирован ли пользователь (0/1)';
COMMENT ON COLUMN bot_users.registration_source IS 'Источник регистрации пользователя';
COMMENT ON COLUMN bot_users.total_payments IS 'Общая сумма платежей пользователя в Telegram Stars';
COMMENT ON COLUMN bot_users.successful_payments_count IS 'Количество успешных платежей';

-- Создание триггера для автоматического обновления updated_at
CREATE OR REPLACE TRIGGER trg_bot_users_updated_at
    BEFORE UPDATE ON bot_users
    FOR EACH ROW
BEGIN
    :NEW.updated_at := SYSDATE;
END;
/

-- Создание последовательности для системных нужд (если потребуется)
CREATE SEQUENCE seq_bot_users_internal START WITH 1 INCREMENT BY 1 NOCACHE; 