-- Schema Avançado CRM SaaS Pro
-- (Não cria/seleciona banco: o instalador já conecta no banco correto)

-- 1. Empresas (Multi-tenant)
CREATE TABLE IF NOT EXISTS empresas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_fantasia VARCHAR(150) NOT NULL,
    razao_social VARCHAR(150),
    cnpj VARCHAR(20) UNIQUE,
    email VARCHAR(100),
    telefone VARCHAR(20),
    endereco TEXT,
    logo VARCHAR(255),
    plano ENUM('free', 'pro', 'enterprise') DEFAULT 'free',
    status ENUM('ativo', 'suspenso', 'cancelado') DEFAULT 'ativo',
    config_openai_key VARCHAR(255),
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Usuários
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    senha VARCHAR(255) NOT NULL,
    nivel ENUM('admin', 'gerente', 'vendedor') DEFAULT 'vendedor',
    foto VARCHAR(255),
    status ENUM('ativo', 'inativo') DEFAULT 'ativo',
    ultimo_login DATETIME,
    token_recuperacao VARCHAR(100),
    token_expira DATETIME,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Clientes (PF e PJ)
CREATE TABLE IF NOT EXISTS clientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    tipo ENUM('PF', 'PJ') DEFAULT 'PF',
    nome VARCHAR(150) NOT NULL,
    documento VARCHAR(20), -- CPF ou CNPJ
    email VARCHAR(100),
    telefone VARCHAR(20),
    whatsapp VARCHAR(20),
    endereco VARCHAR(255),
    cidade VARCHAR(100),
    estado CHAR(2),
    cep VARCHAR(10),
    observacoes TEXT,
    origem VARCHAR(50), -- Facebook, Google, Indicação, etc
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 4. Funil de Vendas (Kanban)
CREATE TABLE IF NOT EXISTS etapas_funil (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    nome VARCHAR(50) NOT NULL,
    ordem INT DEFAULT 0,
    cor VARCHAR(10) DEFAULT '#3b82f6',
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 5. Negócios (Deals/Oportunidades)
CREATE TABLE IF NOT EXISTS negocios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    cliente_id INT NOT NULL,
    usuario_id INT NOT NULL, -- Responsável
    etapa_id INT NOT NULL,
    titulo VARCHAR(150) NOT NULL,
    valor DECIMAL(15, 2) DEFAULT 0.00,
    descricao TEXT,
    probabilidade INT DEFAULT 50,
    previsao_fechamento DATE,
    status ENUM('aberto', 'ganho', 'perdido') DEFAULT 'aberto',
    motivo_perda TEXT,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    atualizado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (etapa_id) REFERENCES etapas_funil(id)
) ENGINE=InnoDB;

-- 6. Histórico de Atendimento / Atividades
CREATE TABLE IF NOT EXISTS atividades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    negocio_id INT,
    cliente_id INT NOT NULL,
    usuario_id INT NOT NULL,
    tipo ENUM('nota', 'ligacao', 'email', 'reuniao', 'whatsapp') DEFAULT 'nota',
    descricao TEXT NOT NULL,
    data_atividade DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (negocio_id) REFERENCES negocios(id) ON DELETE SET NULL,
    FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
) ENGINE=InnoDB;

-- 7. Tarefas e Agenda
CREATE TABLE IF NOT EXISTS tarefas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    usuario_id INT NOT NULL,
    cliente_id INT,
    titulo VARCHAR(150) NOT NULL,
    descricao TEXT,
    prioridade ENUM('baixa', 'media', 'alta') DEFAULT 'media',
    data_vencimento DATETIME,
    status ENUM('pendente', 'em_andamento', 'concluida', 'cancelada') DEFAULT 'pendente',
    concluida_em DATETIME,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 8. Financeiro (Contas a Receber e Pagar)
CREATE TABLE IF NOT EXISTS financeiro (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    usuario_id INT NOT NULL,
    negocio_id INT,
    tipo ENUM('receita', 'despesa') NOT NULL,
    categoria VARCHAR(100),
    valor DECIMAL(15, 2) NOT NULL,
    descricao VARCHAR(255),
    data_vencimento DATE NOT NULL,
    data_pagamento DATE,
    status ENUM('pendente', 'pago', 'atrasado') DEFAULT 'pendente',
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
) ENGINE=InnoDB;

-- 9. Documentos
CREATE TABLE IF NOT EXISTS documentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    cliente_id INT,
    negocio_id INT,
    nome VARCHAR(255) NOT NULL,
    caminho VARCHAR(255) NOT NULL,
    tamanho INT,
    extensao VARCHAR(10),
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 10. Chat Interno
CREATE TABLE IF NOT EXISTS chat_mensagens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    remetente_id INT NOT NULL,
    destinatario_id INT NOT NULL,
    mensagem TEXT NOT NULL,
    lida BOOLEAN DEFAULT FALSE,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE,
    FOREIGN KEY (remetente_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (destinatario_id) REFERENCES usuarios(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- 11. Logs de Auditoria
CREATE TABLE IF NOT EXISTS logs_auditoria (
    id INT AUTO_INCREMENT PRIMARY KEY,
    empresa_id INT NOT NULL,
    usuario_id INT,
    ip_address VARCHAR(45),
    acao TEXT NOT NULL,
    tabela VARCHAR(50),
    registro_id INT,
    criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (empresa_id) REFERENCES empresas(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- Dados Iniciais para o Instalador
-- Empresa Default
INSERT INTO empresas (nome_fantasia) VALUES ('Minha Empresa SaaS');
-- Etapas Default do Funil
INSERT INTO etapas_funil (empresa_id, nome, ordem, cor) VALUES 
(1, 'Lead', 1, '#94a3b8'),
(1, 'Contato Realizado', 2, '#3b82f6'),
(1, 'Reunião Agendada', 3, '#8b5cf6'),
(1, 'Proposta Enviada', 4, '#f59e0b'),
(1, 'Negociação', 5, '#10b981');
