-- Схема хранилища синхронизатора. MySQL 8 / MariaDB 10.4+, utf8mb4.

CREATE TABLE IF NOT EXISTS sync_users (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    email          VARCHAR(255)  NOT NULL,                 -- ключ соответствия: почта = логин Exchange = email юзера Б24
    ews_smtp       VARCHAR(255)  NOT NULL,                 -- ящик, который импёрсонируем (обычно = email)
    b24_user_id    INT           NULL,                     -- резолвится через user.get по email
    b24_section_id INT           NULL,                     -- секция (календарь) по умолчанию в Б24
    ews_sync_state MEDIUMTEXT    NULL,                     -- SyncState из SyncFolderItems, per-mailbox
    active         TINYINT(1)    NOT NULL DEFAULT 1,
    UNIQUE KEY uq_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS event_map (
    id             BIGINT AUTO_INCREMENT PRIMARY KEY,
    email          VARCHAR(255)  NOT NULL,
    ews_item_id    VARCHAR(600)  NULL,                     -- EWS ItemId (длинный)
    ews_change_key VARCHAR(600)  NULL,                     -- нужен для Update/Delete в EWS
    b24_event_id   BIGINT        NULL,
    content_hash   CHAR(40)      NULL,                     -- sha1 нормализованного события (защита от эха)
    last_source    ENUM('exchange','bitrix') NULL,
    is_deleted     TINYINT(1)    NOT NULL DEFAULT 0,
    updated_at     TIMESTAMP     DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_ews (ews_item_id(190)),
    UNIQUE KEY uq_b24 (b24_event_id),
    KEY k_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Дурабельная очередь входящих исходящих-вебхуков Б24 (вебхук стреляет один раз, без ретраев).
CREATE TABLE IF NOT EXISTS b24_inbox (
    id         BIGINT AUTO_INCREMENT PRIMARY KEY,
    event      VARCHAR(64)  NOT NULL,
    entry_id   BIGINT       NULL,
    payload    MEDIUMTEXT   NULL,
    processed  TINYINT(1)   NOT NULL DEFAULT 0,
    created_at TIMESTAMP    DEFAULT CURRENT_TIMESTAMP,
    KEY k_processed (processed)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Простые флаги (dirty-маркер для дебаунса B24 -> EWS и т.п.).
CREATE TABLE IF NOT EXISTS sync_flags (
    name       VARCHAR(64) PRIMARY KEY,
    val        VARCHAR(255) NULL,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
