-- ============================================================
-- MÓDULO DE PROCESSO DE ALUGUEL - FASE 1
-- Criado em: 02/05/2026
-- ============================================================

-- 1. Adicionar status "em negociação" à tabela imoveis
ALTER TABLE imoveis MODIFY COLUMN status_negocio
ENUM('disponível','em negociação','locado','vendido','em manutenção');

-- 2. Tabela principal do processo de aluguel
CREATE TABLE IF NOT EXISTS processo_aluguel (
    id_processo INT PRIMARY KEY AUTO_INCREMENT,
    empresa_id INT NOT NULL,
    id_imovel INT NOT NULL,
    id_locatario INT NOT NULL,
    id_fiador INT DEFAULT NULL,
    id_proprietario INT NOT NULL,
    status VARCHAR(50) NOT NULL DEFAULT 'ABERTO',
    -- Contrato (campos pré-preenchidos do contrato)
    valor_aluguel DECIMAL(12,2) DEFAULT 0,
    data_inicio DATE DEFAULT NULL,
    data_fim DATE DEFAULT NULL,
    dia_vencimento TINYINT DEFAULT 1,
    prazo_meses INT DEFAULT 36,
    periodicidade VARCHAR(20) DEFAULT 'mensal',
    indice_reajuste VARCHAR(20) DEFAULT 'IPCA',
    periodicidade_reajuste INT DEFAULT 12,
    multa_percentual INT DEFAULT 2,
    multa_juros_dia DECIMAL(6,2) DEFAULT 0.05,
    taxa_administracao DECIMAL(5,2) DEFAULT 0,
    garantia_tipo VARCHAR(20) DEFAULT 'fiador',
    observacoes TEXT,
    -- Arquivo do contrato assinado
    contrato_arquivo VARCHAR(255) DEFAULT NULL,
    -- Auditoria
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    data_alteracao DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    usuario_criacao INT DEFAULT NULL,
    -- Nota: a constraint unique foi removida para permitir múltiplos processos encerrados para o mesmo imóvel
-- A verificação de processo ativo é feita na aplicação (abrir.php)
);

-- 3. Log de auditoria do processo
CREATE TABLE IF NOT EXISTS processo_aluguel_log (
    id_log INT PRIMARY KEY AUTO_INCREMENT,
    id_processo INT NOT NULL,
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_usuario INT NOT NULL,
    acao VARCHAR(100) NOT NULL,
    status_anterior VARCHAR(50) DEFAULT NULL,
    status_novo VARCHAR(50) DEFAULT NULL,
    dados_json TEXT,
    ip_usuario VARCHAR(45)
);

-- 4. Parcelas do aluguel
CREATE TABLE IF NOT EXISTS parcelas_aluguel (
    id_parcela INT PRIMARY KEY AUTO_INCREMENT,
    id_processo INT NOT NULL,
    empresa_id INT NOT NULL,
    numero_parcela INT NOT NULL,
    data_vencimento DATE NOT NULL,
    valor_base DECIMAL(12,2) NOT NULL,
    valor_reajustado DECIMAL(12,2) DEFAULT 0,
    valor_pago DECIMAL(12,2) DEFAULT 0,
    status VARCHAR(20) DEFAULT 'PENDENTE',
    data_pagamento DATE DEFAULT NULL,
    id_movimentacao INT DEFAULT NULL,
    data_alteracao DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    usuario_criacao INT DEFAULT NULL,
    UNIQUE KEY unique_parcela (id_processo, numero_parcela)
);

-- ============================================================
-- STATUS DO PROCESSO
-- ============================================================
-- ABERTO                          -> Processo criado
-- CONTRATO_PREENCHIDO             -> Formulário salvo
-- AGUARDANDO_APROVACAO_LOCATARIO  -> Em análise locatário
-- LOCATARIO_APROVADO              -> Locatário aprovado
-- LOCATARIO_REJEITADO             -> Rejeitado (encerrado)
-- AGUARDANDO_APROVACAO_FIADOR     -> Em análise fiador
-- FIADOR_APROVADO                 -> Fiador aprovado
-- FIADOR_REJEITADO                -> Fiador rejeitado (pode trocar)
-- AGUARDANDO_ASSINATURA_CONTRATO  -> Aguardando upload
-- CONTRATO_ASSINADO               -> Assinado, propaganda removida
-- AGUARDANDO_GERACAO_PARCELAS     -> Pronto para gerar
-- PROCESSO_ATIVO                  -> Aluguel em andamento
-- PROCESSO_ENCERRADO_*            -> Finalizado por motivo
-- ============================================================