CREATE TABLE users (
    ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
    AccountID VARCHAR(30) NOT NULL , -- id  квизе из токена
    AmoID INT NOT NULL , -- id в амо
    Name VARCHAR(50) NOT NULL DEFAULT '', -- имя в амо
    Email VARCHAR(50) NOT NULL DEFAULT '', -- почта в амо
    Role VARCHAR(50) NOT NULL DEFAULT '', -- роль в амо
    Group JSONB, -- вложенная структура так как в амо группы хранятся массивом структур
    Deleted BOOLEAN,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    Subdomain VARCHAR(50) NOT NULL DEFAULT '',
    AmoUserID INT NOT NULL , -- id пользователя который подключал интеграцию
    Country VARCHAR(50) NOT NULL DEFAULT '', -- страна в амо
    FOREIGN KEY (AccountID) REFERENCES tokens (AccountID), -- связь с таблицей tokens
    FOREIGN KEY (AmoID) REFERENCES pipelines (AccountID) -- связь с таблицей pipelines
);

CREATE TABLE tokens (
    AccountID VARCHAR(30) PRIMARY KEY, -- связь с users AccountID
    RefreshToken VARCHAR(512) NOT NULL ,
    AccessToken VARCHAR(512) NOT NULL ,
    AuthCode VARCHAR(512) NOT NULL , -- код авторизации который получаем при вебхук
    Expiration TIMESTAMP NOT NULL, -- время истечения токенов
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE pipelines (
    ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
    AmoID INT NOT NULL , --id воронки в амо
    AccountID INT NOT NULL , --id аккаунта в амо связь с таблицей users AmoID
    Name VARCHAR(50) NOT NULL DEFAULT '', --название воронки в амо
    IsArchive BOOLEAN, --флаг архивной воронки в амо
    Deleted BOOLEAN,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (AccountID) REFERENCES users (AmoID) -- связь с таблицей users
);

CREATE TABLE steps (
    ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
    AmoID INT NOT NULL, --id шага воронки в амо
    PipelineID INT NOT NULL, --id воронки AmoID pipelines
    AccountID INT NOT NULL, --id аккаунта в амо связь с таблицей users AmoID
    Name VARCHAR(50) NOT NULL DEFAULT '', --название воронки в амо
    Color VARCHAR(50) NOT NULL DEFAULT '', --цвет шага в амо*
    Deleted BOOLEAN,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (AccountID) REFERENCES users (AmoID),
    FOREIGN KEY (PipelineID) REFERENCES pipelines (ID)
);

CREATE TYPE EntityType AS ENUM ('leads', 'contacts', 'companies', 'customers');

CREATE TABLE fields (
    ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
    AmoID INT NOT NULL, -- айдишник кастомного поля в амо
    Code VARCHAR(255) NOT NULL DEFAULT '', -- кодовое слово в амо
    AccountID INT NOT NULL, -- id аккаунта в амо связь с таблицей users AmoID
    Name VARCHAR(50) NOT NULL DEFAULT '', -- название воронки в амо
    Entity EntityType NOT NULL, -- тип сущности в амо, для которой это кастомное поле
    Type VARCHAR(50) NOT NULL DEFAULT '', -- тип поля
    Deleted BOOLEAN,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (AccountID) REFERENCES users (AmoID)
);

CREATE TABLE tags (
    ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
    AmoID INT NOT NULL, -- айдишник тега в амо
    AccountID INT NOT NULL, -- id аккаунта в амо связь с таблицей users AmoID
    Entity EntityType NOT NULL, -- сущность, к которой принадлежит этот тег
    Name VARCHAR(50) NOT NULL DEFAULT '', -- название тега в амо
    Color VARCHAR(50) NOT NULL DEFAULT '', -- цвет тега в амо
    Deleted BOOLEAN,
    CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
