PRAGMA journal_mode=WAL;
PRAGMA foreign_keys=ON;

CREATE TABLE IF NOT EXISTS organizations (
    id         INTEGER PRIMARY KEY AUTOINCREMENT,
    name       TEXT NOT NULL,
    created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

-- Белый список телефонов по организациям.
-- phone хранится только цифрами, напр. "79001234567"
CREATE TABLE IF NOT EXISTS org_users (
    id           INTEGER PRIMARY KEY AUTOINCREMENT,
    org_id       INTEGER NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
    phone        TEXT NOT NULL,
    display_name TEXT,
    created_at   TEXT NOT NULL DEFAULT (datetime('now')),
    UNIQUE(phone)
);

-- Реальные пользователи MAX, которые написали боту
CREATE TABLE IF NOT EXISTS bot_users (
    id            INTEGER PRIMARY KEY AUTOINCREMENT,
    max_user_id   INTEGER NOT NULL UNIQUE,
    max_chat_id   INTEGER,
    username      TEXT,
    first_name    TEXT,
    phone         TEXT,            -- заполняется после шаринга контакта
    org_id        INTEGER REFERENCES organizations(id),
    is_authorized INTEGER NOT NULL DEFAULT 0,  -- 1 = авторизован
    is_blocked    INTEGER NOT NULL DEFAULT 0,  -- 1 = заблокирован
    created_at    TEXT NOT NULL DEFAULT (datetime('now')),
    updated_at    TEXT NOT NULL DEFAULT (datetime('now'))
);

CREATE TABLE IF NOT EXISTS tickets (
    id           INTEGER PRIMARY KEY AUTOINCREMENT,
    org_id       INTEGER NOT NULL REFERENCES organizations(id),
    created_by   INTEGER NOT NULL REFERENCES bot_users(id),
    description  TEXT NOT NULL,
    status       TEXT NOT NULL DEFAULT 'open',  -- open / in_progress / closed
    last_comment TEXT,
    created_at   TEXT NOT NULL DEFAULT (datetime('now')),
    updated_at   TEXT NOT NULL DEFAULT (datetime('now'))
);

CREATE TABLE IF NOT EXISTS ticket_attachments (
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    ticket_id       INTEGER NOT NULL REFERENCES tickets(id) ON DELETE CASCADE,
    attachment_type TEXT NOT NULL,   -- image / audio / file / video
    attachment_url  TEXT,
    filename        TEXT,
    created_at      TEXT NOT NULL DEFAULT (datetime('now'))
);

-- Лог всех входящих и исходящих сообщений
CREATE TABLE IF NOT EXISTS message_log (
    id              INTEGER PRIMARY KEY AUTOINCREMENT,
    direction       TEXT NOT NULL,   -- 'in' / 'out'
    max_user_id     INTEGER,
    max_chat_id     INTEGER,
    message_id      TEXT,
    text            TEXT,
    attachment_json TEXT,            -- JSON-строка списка вложений
    created_at      TEXT NOT NULL DEFAULT (datetime('now'))
);
