CREATE TABLE IF NOT EXISTS clientes_conexao_web (
    id INT NOT NULL AUTO_INCREMENT,
    cliente_cnpj VARCHAR(20) NOT NULL,
    host VARCHAR(255) NOT NULL,
    porta INT NOT NULL DEFAULT 3306,
    banco VARCHAR(255) NOT NULL,
    usuario VARCHAR(255) NOT NULL,
    senha VARCHAR(255) NULL,
    senha_criptografada TEXT NULL,
    ativo CHAR(1) NOT NULL DEFAULT 'S',
    observacao VARCHAR(255) NULL,
    criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_clientes_conexao_web_cliente_cnpj (cliente_cnpj),
    KEY idx_clientes_conexao_web_ativo (ativo)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

SET @db_name := DATABASE();

SET @sql_add_senha_criptografada := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND COLUMN_NAME = 'senha_criptografada'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD COLUMN senha_criptografada TEXT NULL AFTER senha'
    )
);
PREPARE stmt_add_senha_criptografada FROM @sql_add_senha_criptografada;
EXECUTE stmt_add_senha_criptografada;
DEALLOCATE PREPARE stmt_add_senha_criptografada;

SET @sql_add_ativo := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND COLUMN_NAME = 'ativo'
        ),
        'SELECT 1',
        "ALTER TABLE clientes_conexao_web ADD COLUMN ativo CHAR(1) NOT NULL DEFAULT 'S' AFTER senha_criptografada"
    )
);
PREPARE stmt_add_ativo FROM @sql_add_ativo;
EXECUTE stmt_add_ativo;
DEALLOCATE PREPARE stmt_add_ativo;

SET @sql_add_observacao := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND COLUMN_NAME = 'observacao'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD COLUMN observacao VARCHAR(255) NULL AFTER ativo'
    )
);
PREPARE stmt_add_observacao FROM @sql_add_observacao;
EXECUTE stmt_add_observacao;
DEALLOCATE PREPARE stmt_add_observacao;

SET @sql_add_criado_em := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND COLUMN_NAME = 'criado_em'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD COLUMN criado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP'
    )
);
PREPARE stmt_add_criado_em FROM @sql_add_criado_em;
EXECUTE stmt_add_criado_em;
DEALLOCATE PREPARE stmt_add_criado_em;

SET @sql_add_atualizado_em := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.COLUMNS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND COLUMN_NAME = 'atualizado_em'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD COLUMN atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'
    )
);
PREPARE stmt_add_atualizado_em FROM @sql_add_atualizado_em;
EXECUTE stmt_add_atualizado_em;
DEALLOCATE PREPARE stmt_add_atualizado_em;

SET @sql_add_unique := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.STATISTICS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND INDEX_NAME = 'uk_clientes_conexao_web_cliente_cnpj'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD UNIQUE KEY uk_clientes_conexao_web_cliente_cnpj (cliente_cnpj)'
    )
);
PREPARE stmt_add_unique FROM @sql_add_unique;
EXECUTE stmt_add_unique;
DEALLOCATE PREPARE stmt_add_unique;

SET @sql_add_idx_ativo := (
    SELECT IF(
        EXISTS(
            SELECT 1
            FROM information_schema.STATISTICS
            WHERE TABLE_SCHEMA = @db_name
              AND TABLE_NAME = 'clientes_conexao_web'
              AND INDEX_NAME = 'idx_clientes_conexao_web_ativo'
        ),
        'SELECT 1',
        'ALTER TABLE clientes_conexao_web ADD KEY idx_clientes_conexao_web_ativo (ativo)'
    )
);
PREPARE stmt_add_idx_ativo FROM @sql_add_idx_ativo;
EXECUTE stmt_add_idx_ativo;
DEALLOCATE PREPARE stmt_add_idx_ativo;

-- Importante:
-- 1) senha_criptografada deve armazenar o valor gerado pela função PHP criptografarSenhaClientesWeb().
-- 2) senha em texto puro foi mantida apenas por compatibilidade temporária.
-- 3) após migrar tudo para senha_criptografada, zere a coluna senha.
