-- Instalação limpa. Executado pelo instalador web (public/instalar.php).
-- Não roda ALTER: este é o estado final do banco.

CREATE TABLE produtos (
    id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    marketplace   ENUM('shopee','mercadolivre','amazon','magalu') NOT NULL,
    external_id   VARCHAR(64)  NOT NULL,
    titulo        VARCHAR(255) NOT NULL,
    slug          VARCHAR(200) NULL,
    url_original  TEXT         NOT NULL,
    imagem        TEXT         NULL,
    categoria     VARCHAR(120) NULL,
    loja          VARCHAR(160) NULL,
    ativo         TINYINT(1)   NOT NULL DEFAULT 1,
    status        ENUM('rascunho','pendente','aprovado','recusado') NOT NULL DEFAULT 'pendente',
    link_status   ENUM('pendente','ok','dispensado') NOT NULL DEFAULT 'pendente',
    destaque      TINYINT(1)   NOT NULL DEFAULT 0,
    resenha       TEXT         NULL,
    meta_desc     VARCHAR(255) NULL,
    aprovado_por  BIGINT UNSIGNED NULL,
    aprovado_em   DATETIME     NULL,
    criado_em     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uq_produto (marketplace, external_id),
    UNIQUE KEY uq_slug (slug),
    KEY idx_categoria (categoria),
    KEY idx_status (status, link_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE precos (
    id             BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    produto_id     BIGINT UNSIGNED NOT NULL,
    preco          DECIMAL(12,2)   NOT NULL,
    preco_original DECIMAL(12,2)   NULL,
    comissao_rate  DECIMAL(6,4)    NULL,
    coletado_em    DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_produto_data (produto_id, coletado_em),
    CONSTRAINT fk_precos_produto FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE links (
    id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    produto_id    BIGINT UNSIGNED NOT NULL,
    canal         VARCHAR(40)  NOT NULL,
    origem        ENUM('api','manual') NOT NULL DEFAULT 'api',
    subid         VARCHAR(80)  NULL,
    url_afiliado  TEXT         NOT NULL,
    codigo        VARCHAR(12)  NOT NULL,
    criado_em     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uq_codigo (codigo),
    UNIQUE KEY uq_produto_canal (produto_id, canal),
    CONSTRAINT fk_links_produto FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE cliques (
    id         BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    link_id    BIGINT UNSIGNED NOT NULL,
    ip_hash    CHAR(64)     NULL,
    user_agent VARCHAR(255) NULL,
    referer    VARCHAR(255) NULL,
    criado_em  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_link_data (link_id, criado_em),
    CONSTRAINT fk_cliques_link FOREIGN KEY (link_id) REFERENCES links(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE publicacoes (
    id               BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    produto_id       BIGINT UNSIGNED NOT NULL,
    canal            VARCHAR(40)   NOT NULL,
    mensagem_id      VARCHAR(40)   NULL,
    preco_publicado  DECIMAL(12,2) NOT NULL,
    desconto_pct     DECIMAL(5,2)  NULL,
    score            DECIMAL(8,2)  NULL,
    publicado_em     DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_produto_data (produto_id, publicado_em),
    CONSTRAINT fk_pub_produto FOREIGN KEY (produto_id) REFERENCES produtos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE conversoes (
    id            BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    marketplace   VARCHAR(20)   NOT NULL,
    conversion_id VARCHAR(64)   NOT NULL,
    utm_content   VARCHAR(160)  NULL,
    comissao      DECIMAL(12,2) NOT NULL DEFAULT 0,
    status        VARCHAR(20)   NULL,
    comprado_em   DATETIME      NULL,
    atualizado_em DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_conv (marketplace, conversion_id),
    KEY idx_utm (utm_content)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE usuarios (
    id           BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    nome         VARCHAR(120)  NOT NULL,
    email        VARCHAR(160)  NOT NULL,
    senha_hash   VARCHAR(255)  NOT NULL,
    papel        ENUM('admin','editor') NOT NULL DEFAULT 'editor',
    ativo        TINYINT(1)    NOT NULL DEFAULT 1,
    ultimo_login DATETIME      NULL,
    criado_em    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uq_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE cupons (
    id           BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    marketplace  ENUM('shopee','mercadolivre','amazon','magalu') NOT NULL,
    codigo       VARCHAR(60)   NOT NULL,
    descricao    VARCHAR(255)  NOT NULL,
    regra        VARCHAR(255)  NULL,
    desconto     VARCHAR(40)   NULL,
    url_destino  TEXT          NOT NULL,
    inicia_em    DATETIME      NULL,
    expira_em    DATETIME      NOT NULL,
    ativo        TINYINT(1)    NOT NULL DEFAULT 1,
    criado_em    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_vigencia (ativo, expira_em)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE configuracoes (
    chave         VARCHAR(60) PRIMARY KEY,
    valor         TEXT NULL,
    atualizado_em DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE auditoria (
    id         BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id BIGINT UNSIGNED NULL,
    acao       VARCHAR(60)  NOT NULL,
    alvo       VARCHAR(120) NULL,
    detalhe    TEXT         NULL,
    ip_hash    CHAR(64)     NULL,
    criado_em  DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_data (criado_em)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Valores padrão. Tudo editável no painel; nada exige acesso ao servidor.
INSERT INTO configuracoes (chave, valor) VALUES
    ('site_titulo',            'Ofertas'),
    ('site_descricao',         'Ofertas com histórico de preço verificado.'),
    ('site_url',               ''),
    ('indexacao',              '0'),
    ('publicacao_auto',        '0'),
    ('ga_id',                  ''),
    ('itens_por_pagina',       '24'),

    ('cpanel_host',            ''),
    ('cpanel_usuario',         ''),
    ('cpanel_token',           ''),

    ('shopee_app_id',          ''),
    ('shopee_secret',          ''),
    ('ml_client_id',           ''),
    ('ml_client_secret',       ''),
    ('ml_matt_word',           ''),
    ('ml_matt_tool',           ''),
    ('amazon_access_key',      ''),
    ('amazon_secret_key',      ''),
    ('amazon_partner_tag',     ''),
    ('telegram_token',         ''),
    ('telegram_chat_id',       ''),

    ('termos_coleta',          "fone bluetooth\nsmartwatch\nair fryer"),
    ('desconto_minimo_pct',    '15'),
    ('comissao_minima_rate',   '0.03'),
    ('preco_minimo',           '25'),
    ('cooldown_dias',          '7'),
    ('max_por_execucao',       '8'),
    ('intervalo_envio_seg',    '12');
