-- Estrutura inicial do portal do cliente v1
ALTER TABLE contatos
    ADD COLUMN IF NOT EXISTS acesso_portal TINYINT(1) NOT NULL DEFAULT 0 AFTER status,
    ADD COLUMN IF NOT EXISTS senha_hash VARCHAR(255) NULL AFTER acesso_portal,
    ADD COLUMN IF NOT EXISTS ultimo_login_em DATETIME NULL AFTER senha_hash,
    ADD COLUMN IF NOT EXISTS token_ativacao VARCHAR(100) NULL AFTER ultimo_login_em,
    ADD COLUMN IF NOT EXISTS token_redefinicao_senha VARCHAR(100) NULL AFTER token_ativacao,
    ADD COLUMN IF NOT EXISTS token_redefinicao_expira_em DATETIME NULL AFTER token_redefinicao_senha,
    ADD COLUMN IF NOT EXISTS email_verificado_em DATETIME NULL AFTER token_redefinicao_expira_em,
    ADD COLUMN IF NOT EXISTS tentativas_login INT NOT NULL DEFAULT 0 AFTER email_verificado_em,
    ADD COLUMN IF NOT EXISTS bloqueado_ate DATETIME NULL AFTER tentativas_login;

ALTER TABLE anexos
    ADD COLUMN IF NOT EXISTS visivel_cliente TINYINT(1) NOT NULL DEFAULT 0 AFTER tamanho_bytes;

CREATE TABLE IF NOT EXISTS sessoes_contatos_login (
    id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    contato_id INT UNSIGNED NOT NULL,
    token_sessao VARCHAR(64) NOT NULL,
    ip VARCHAR(45) NULL,
    navegador VARCHAR(255) NULL,
    data_expiracao DATETIME NOT NULL,
    data_criacao DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_sessoes_contatos_login_contato FOREIGN KEY (contato_id) REFERENCES contatos(id) ON DELETE CASCADE,
    UNIQUE KEY uq_sessoes_contatos_login_token (token_sessao),
    KEY idx_sessoes_contatos_login_contato (contato_id),
    KEY idx_sessoes_contatos_login_expiracao (data_expiracao)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE INDEX idx_contatos_acesso_portal ON contatos(acesso_portal, status, email);
CREATE INDEX idx_chamados_contato_data_atualizacao ON chamados(contato_id, data_atualizacao);
CREATE INDEX idx_anexos_visivel_cliente ON anexos(chamado_id, visivel_cliente, data_criacao);
