-- ============================================================
-- Migration: Tabelas do Pregão Eletrônico
-- LicitaXpress — E03
-- ============================================================

-- Propostas dos fornecedores
CREATE TABLE IF NOT EXISTS `propostas` (
    `id`              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `licitacao_id`    INT UNSIGNED NOT NULL,
    `fornecedor_id`   INT UNSIGNED NOT NULL,
    `valor_total`     DECIMAL(15,2) NOT NULL,
    `arquivo_path`    VARCHAR(255) DEFAULT NULL,
    `declaracao`      TINYINT(1) NOT NULL DEFAULT 0,
    `situacao`        ENUM('pendente','valida','desclassificada','vencedora') NOT NULL DEFAULT 'pendente',
    `motivo_desclass` TEXT DEFAULT NULL,
    `is_me_epp`       TINYINT(1) NOT NULL DEFAULT 0,
    `enviada_em`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `atualizada_em`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uk_licit_fornec` (`licitacao_id`, `fornecedor_id`),
    INDEX `idx_licitacao`  (`licitacao_id`),
    INDEX `idx_situacao`   (`situacao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Itens da proposta (para licitações com itens)
CREATE TABLE IF NOT EXISTS `proposta_itens` (
    `id`             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `proposta_id`    INT UNSIGNED NOT NULL,
    `item_id`        INT UNSIGNED NOT NULL,
    `valor_unitario` DECIMAL(12,4) NOT NULL,
    `quantidade`     DECIMAL(12,4) NOT NULL,
    `valor_total`    DECIMAL(15,2) NOT NULL,
    `marca`          VARCHAR(100) DEFAULT NULL,
    `modelo`         VARCHAR(100) DEFAULT NULL,
    FOREIGN KEY (`proposta_id`) REFERENCES `propostas`(`id`) ON DELETE CASCADE,
    INDEX `idx_proposta` (`proposta_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Sessões de disputa
CREATE TABLE IF NOT EXISTS `sessoes_disputa` (
    `id`                 INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `licitacao_id`       INT UNSIGNED NOT NULL,
    `pregoeiro_id`       INT UNSIGNED NOT NULL,
    `fase`               ENUM('aguardando','julgamento','lances','negociacao',
                               'habilitacao','recursal','adjudicada','homologada',
                               'deserta','fracassada','suspensa') NOT NULL DEFAULT 'aguardando',
    `modo_disputa`       TINYINT UNSIGNED NOT NULL DEFAULT 1,
    `inicio_disputa`     DATETIME DEFAULT NULL,
    `fim_disputa`        DATETIME DEFAULT NULL,
    `vencedor_id`        INT UNSIGNED DEFAULT NULL,
    `valor_vencedor`     DECIMAL(15,2) DEFAULT NULL,
    `criado_em`          DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `atualizado_em`      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY `uk_licitacao` (`licitacao_id`),
    INDEX `idx_fase` (`fase`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Lances em tempo real
CREATE TABLE IF NOT EXISTS `lances` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `sessao_id`     INT UNSIGNED NOT NULL,
    `fornecedor_id` INT UNSIGNED NOT NULL,
    `valor`         DECIMAL(15,2) NOT NULL,
    `situacao`      ENUM('valido','invalido','retirado') NOT NULL DEFAULT 'valido',
    `motivo_inv`    VARCHAR(200) DEFAULT NULL,
    `criado_em`     DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    INDEX `idx_sessao_valid` (`sessao_id`, `situacao`),
    INDEX `idx_sessao_criado` (`sessao_id`, `criado_em`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Chat da sessão
CREATE TABLE IF NOT EXISTS `sessao_chat` (
    `id`             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `sessao_id`      INT UNSIGNED NOT NULL,
    `autor_tipo`     ENUM('pregoeiro','fornecedor','sistema') NOT NULL,
    `autor_id`       INT UNSIGNED DEFAULT NULL,
    `autor_nome`     VARCHAR(120) NOT NULL,
    `mensagem`       TEXT NOT NULL,
    `destinatario_id`INT UNSIGNED DEFAULT NULL,
    `criado_em`      DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    INDEX `idx_sessao_criado` (`sessao_id`, `criado_em`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Habilitação
CREATE TABLE IF NOT EXISTS `habilitacao` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `sessao_id`     INT UNSIGNED NOT NULL,
    `fornecedor_id` INT UNSIGNED NOT NULL,
    `ordem`         TINYINT UNSIGNED NOT NULL DEFAULT 1,
    `situacao`      ENUM('aguardando','enviando','em_analise','habilitado','inabilitado') NOT NULL DEFAULT 'aguardando',
    `observacoes`   TEXT DEFAULT NULL,
    `analisado_por` INT UNSIGNED DEFAULT NULL,
    `analisado_em`  DATETIME DEFAULT NULL,
    `criado_em`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX `idx_sessao` (`sessao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Documentos de habilitação
CREATE TABLE IF NOT EXISTS `habilitacao_documentos` (
    `id`              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `habilitacao_id`  INT UNSIGNED NOT NULL,
    `tipo`            VARCHAR(100) NOT NULL,
    `arquivo_path`    VARCHAR(255) NOT NULL,
    `situacao`        ENUM('pendente','aprovado','rejeitado') NOT NULL DEFAULT 'pendente',
    `obs`             TEXT DEFAULT NULL,
    `criado_em`       DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`habilitacao_id`) REFERENCES `habilitacao`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Recursos
CREATE TABLE IF NOT EXISTS `recursos_licitacao` (
    `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `sessao_id`     INT UNSIGNED NOT NULL,
    `fornecedor_id` INT UNSIGNED NOT NULL,
    `tipo`          ENUM('intencao','razoes','contrarrazoes') NOT NULL,
    `texto`         TEXT NOT NULL,
    `arquivo_path`  VARCHAR(255) DEFAULT NULL,
    `situacao`      ENUM('pendente','acatado','nao_acatado') NOT NULL DEFAULT 'pendente',
    `resposta`      TEXT DEFAULT NULL,
    `criado_em`     DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `respondida_em` DATETIME DEFAULT NULL,
    INDEX `idx_sessao` (`sessao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
