-- ============================================
-- Sistema de Assinatura Digital
-- Tabelas para gerenciamento de assinaturas de documentos
-- ============================================

-- Tabela document_signatures (sessões de assinatura)
-- Uma sessão de assinatura é criada para cada documento que precisa ser assinado
CREATE TABLE IF NOT EXISTS document_signatures (
    id INT AUTO_INCREMENT PRIMARY KEY,
    document_type ENUM('document_contract', 'tce_contract') NOT NULL COMMENT 'Tipo de documento (document_contract ou tce_contract)',
    document_id INT NOT NULL COMMENT 'ID do documento (document_contracts.id ou tce_contracts.id)',
    status ENUM('pending', 'in_progress', 'completed', 'cancelled') DEFAULT 'pending' COMMENT 'Status da sessão de assinatura',
    created_by INT NULL COMMENT 'ID do usuário que iniciou a coleta de assinaturas',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    completed_at TIMESTAMP NULL COMMENT 'Data/hora em que todas as assinaturas foram coletadas',
    INDEX idx_document (document_type, document_id),
    INDEX idx_status (status),
    INDEX idx_created_by (created_by),
    FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Sessões de assinatura de documentos';

-- Tabela document_signers (signatários - quem precisa assinar)
-- Lista de pessoas que precisam assinar cada documento
CREATE TABLE IF NOT EXISTS document_signers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    signature_id INT NOT NULL COMMENT 'ID da sessão de assinatura',
    name VARCHAR(255) NOT NULL COMMENT 'Nome do signatário',
    email VARCHAR(255) NOT NULL COMMENT 'Email do signatário',
    phone VARCHAR(20) NULL COMMENT 'Telefone do signatário (para WhatsApp futuro)',
    sign_order INT NOT NULL DEFAULT 1 COMMENT 'Ordem de assinatura (1 = primeiro, 2 = segundo, etc)',
    status ENUM('pending', 'sent', 'signed', 'expired') DEFAULT 'pending' COMMENT 'Status da assinatura individual',
    token VARCHAR(64) NOT NULL COMMENT 'Token único para link de assinatura',
    token_expires_at TIMESTAMP NULL COMMENT 'Data de expiração do token (opcional)',
    signed_at TIMESTAMP NULL COMMENT 'Data/hora em que assinou',
    ip_address VARCHAR(45) NULL COMMENT 'IP de onde assinou',
    user_agent TEXT NULL COMMENT 'User agent do navegador',
    signature_data TEXT NULL COMMENT 'Dados da assinatura (imagem base64 ou JSON)',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_signature (signature_id),
    INDEX idx_token (token),
    INDEX idx_status (status),
    INDEX idx_email (email),
    UNIQUE KEY unique_token (token),
    FOREIGN KEY (signature_id) REFERENCES document_signatures(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Signatários e suas assinaturas';

-- Tabela signature_emails (histórico de emails enviados)
-- Registra quando e para quem os emails foram enviados
CREATE TABLE IF NOT EXISTS signature_emails (
    id INT AUTO_INCREMENT PRIMARY KEY,
    signer_id INT NOT NULL COMMENT 'ID do signatário',
    email_to VARCHAR(255) NOT NULL COMMENT 'Email destinatário',
    email_subject VARCHAR(255) NOT NULL COMMENT 'Assunto do email',
    email_body TEXT NOT NULL COMMENT 'Corpo do email',
    sent_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Data/hora do envio',
    status ENUM('sent', 'failed', 'bounced') DEFAULT 'sent' COMMENT 'Status do envio',
    error_message TEXT NULL COMMENT 'Mensagem de erro (se falhou)',
    INDEX idx_signer (signer_id),
    INDEX idx_sent_at (sent_at),
    FOREIGN KEY (signer_id) REFERENCES document_signers(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Histórico de emails de assinatura enviados';

-- Verifica se as tabelas foram criadas
SHOW TABLES LIKE 'document_signature%';
SHOW TABLES LIKE 'signature_%';

