-- =============================================
-- MIGRAÇÃO V2 - Sistema Lico Lico
-- Executar APÓS o banco original estar rodando
-- =============================================

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
SET NAMES utf8mb4;

-- =============================================
-- 1. NOVAS TABELAS FINANCEIRAS
-- =============================================

-- Contas Bancárias
CREATE TABLE IF NOT EXISTS `contas_bancarias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL COMMENT 'Ex: Conta Itaú, Caixa Físico',
  `banco` varchar(100) DEFAULT NULL COMMENT 'Nome do banco',
  `agencia` varchar(20) DEFAULT NULL,
  `numero_conta` varchar(30) DEFAULT NULL,
  `tipo` enum('corrente','poupanca','caixa_fisico','pix') DEFAULT 'corrente',
  `saldo_inicial` decimal(12,2) DEFAULT 0.00,
  `saldo_atual` decimal(12,2) DEFAULT 0.00,
  `status` enum('ativo','inativo') DEFAULT 'ativo',
  `criado_em` datetime DEFAULT CURRENT_TIMESTAMP,
  `atualizado_em` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Extrato Bancário / Movimentações por Conta
CREATE TABLE IF NOT EXISTS `extrato_bancario` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `conta_bancaria_id` int(11) NOT NULL,
  `tipo` enum('entrada','saida','transferencia') NOT NULL,
  `descricao` varchar(255) DEFAULT NULL,
  `valor` decimal(12,2) NOT NULL,
  `saldo_anterior` decimal(12,2) DEFAULT 0.00,
  `saldo_posterior` decimal(12,2) DEFAULT 0.00,
  `data_movimento` date NOT NULL,
  `referencia_tipo` varchar(50) DEFAULT NULL COMMENT 'contas_receber, contas_pagar, transferencia',
  `referencia_id` int(11) DEFAULT NULL,
  `conta_destino_id` int(11) DEFAULT NULL COMMENT 'Para transferências entre contas',
  `observacao` text DEFAULT NULL,
  `criado_em` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_conta` (`conta_bancaria_id`),
  KEY `idx_data` (`data_movimento`),
  KEY `idx_tipo` (`tipo`),
  CONSTRAINT `fk_extrato_conta` FOREIGN KEY (`conta_bancaria_id`) REFERENCES `contas_bancarias` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Centro de Custo
CREATE TABLE IF NOT EXISTS `centros_custo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL COMMENT 'Ex: Administrativo, Pedagógico, Alimentação',
  `descricao` varchar(255) DEFAULT NULL,
  `status` enum('ativo','inativo') DEFAULT 'ativo',
  `criado_em` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Plano de Contas (categorias hierárquicas)
CREATE TABLE IF NOT EXISTS `plano_contas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `codigo` varchar(20) NOT NULL COMMENT 'Ex: 1.01, 2.03',
  `nome` varchar(150) NOT NULL,
  `tipo` enum('receita','despesa') NOT NULL,
  `pai_id` int(11) DEFAULT NULL,
  `status` enum('ativo','inativo') DEFAULT 'ativo',
  PRIMARY KEY (`id`),
  KEY `idx_tipo` (`tipo`),
  KEY `idx_pai` (`pai_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- =============================================
-- 2. ALTERAR TABELAS EXISTENTES (adicionar campos)
-- =============================================

-- Contas a Receber: adicionar conta bancária e centro de custo
ALTER TABLE `contas_receber`
  ADD COLUMN IF NOT EXISTS `conta_bancaria_id` int(11) DEFAULT NULL AFTER `forma_pagamento_id`,
  ADD COLUMN IF NOT EXISTS `centro_custo_id` int(11) DEFAULT NULL AFTER `conta_bancaria_id`,
  ADD COLUMN IF NOT EXISTS `plano_conta_id` int(11) DEFAULT NULL AFTER `centro_custo_id`,
  ADD COLUMN IF NOT EXISTS `observacao` text DEFAULT NULL AFTER `plano_conta_id`,
  ADD COLUMN IF NOT EXISTS `usuario_baixa_id` int(11) DEFAULT NULL AFTER `observacao`,
  ADD KEY `idx_status` (`status`),
  ADD KEY `idx_vencimento` (`data_vencimento`),
  ADD KEY `idx_aluno` (`aluno_id`);

-- Contas a Pagar: reestruturar com FK real para fornecedor
ALTER TABLE `contas_pagar`
  ADD COLUMN IF NOT EXISTS `numero` varchar(30) DEFAULT NULL AFTER `id`,
  ADD COLUMN IF NOT EXISTS `valor_original` decimal(12,2) DEFAULT NULL AFTER `valor`,
  ADD COLUMN IF NOT EXISTS `valor_pago` decimal(12,2) DEFAULT 0.00 AFTER `valor_original`,
  ADD COLUMN IF NOT EXISTS `conta_bancaria_id` int(11) DEFAULT NULL AFTER `forma_pagamento_id`,
  ADD COLUMN IF NOT EXISTS `centro_custo_id` int(11) DEFAULT NULL AFTER `conta_bancaria_id`,
  ADD COLUMN IF NOT EXISTS `plano_conta_id` int(11) DEFAULT NULL AFTER `centro_custo_id`,
  ADD COLUMN IF NOT EXISTS `observacao` text DEFAULT NULL AFTER `plano_conta_id`,
  ADD COLUMN IF NOT EXISTS `parcela` int(11) DEFAULT 1 AFTER `observacao`,
  ADD COLUMN IF NOT EXISTS `total_parcelas` int(11) DEFAULT 1 AFTER `parcela`,
  ADD KEY `idx_status_cp` (`status`),
  ADD KEY `idx_vencimento_cp` (`data_vencimento`),
  ADD KEY `idx_fornecedor` (`fornecedor_id`);

-- Movimentações Financeiras: vincular à conta bancária
ALTER TABLE `movimentacoes_financeiras`
  ADD COLUMN IF NOT EXISTS `conta_bancaria_id` int(11) DEFAULT NULL AFTER `forma_pagamento_id`,
  ADD COLUMN IF NOT EXISTS `centro_custo_id` int(11) DEFAULT NULL AFTER `conta_bancaria_id`,
  ADD KEY `idx_data_mov` (`data_movimento`),
  ADD KEY `idx_tipo_mov` (`tipo`);

-- =============================================
-- 3. ÍNDICES DE PERFORMANCE
-- =============================================

-- Alunos
ALTER TABLE `alunos`
  ADD KEY IF NOT EXISTS `idx_status_aluno` (`status`),
  ADD KEY IF NOT EXISTS `idx_nome_aluno` (`nome`);

-- Funcionários
ALTER TABLE `funcionarios`
  ADD KEY IF NOT EXISTS `idx_status_func` (`status`),
  ADD KEY IF NOT EXISTS `idx_nome_func` (`nome`);

-- Fornecedores
ALTER TABLE `fornecedores`
  ADD KEY IF NOT EXISTS `idx_status_forn` (`status`),
  ADD KEY IF NOT EXISTS `idx_nome_forn` (`nome`);

-- Produtos
ALTER TABLE `produtos`
  ADD KEY IF NOT EXISTS `idx_status_prod` (`status`);

-- Usuários
ALTER TABLE `usuarios`
  ADD KEY IF NOT EXISTS `idx_email_user` (`email`);

-- =============================================
-- 4. DADOS INICIAIS (SEED)
-- =============================================

-- Conta bancária padrão
INSERT INTO `contas_bancarias` (`nome`, `banco`, `tipo`, `saldo_inicial`, `saldo_atual`) VALUES
('Caixa Físico', 'Caixa da Escola', 'caixa_fisico', 0.00, 0.00);

-- Centros de custo padrão
INSERT INTO `centros_custo` (`nome`, `descricao`) VALUES
('Administrativo', 'Despesas administrativas gerais'),
('Pedagógico', 'Material didático e recursos pedagógicos'),
('Alimentação', 'Custos com alimentação dos alunos'),
('Manutenção', 'Manutenção predial e equipamentos'),
('Pessoal', 'Folha de pagamento e encargos'),
('Marketing', 'Publicidade e divulgação');

-- Plano de contas básico
INSERT INTO `plano_contas` (`codigo`, `nome`, `tipo`) VALUES
('1.01', 'Mensalidades', 'receita'),
('1.02', 'Matrículas', 'receita'),
('1.03', 'Material Escolar', 'receita'),
('1.04', 'Uniformes', 'receita'),
('1.05', 'Eventos', 'receita'),
('1.06', 'Outras Receitas', 'receita'),
('2.01', 'Salários e Encargos', 'despesa'),
('2.02', 'Aluguel', 'despesa'),
('2.03', 'Energia Elétrica', 'despesa'),
('2.04', 'Água', 'despesa'),
('2.05', 'Internet e Telefone', 'despesa'),
('2.06', 'Material de Limpeza', 'despesa'),
('2.07', 'Material Didático', 'despesa'),
('2.08', 'Alimentação', 'despesa'),
('2.09', 'Manutenção', 'despesa'),
('2.10', 'Marketing', 'despesa'),
('2.11', 'Impostos e Taxas', 'despesa'),
('2.12', 'Outras Despesas', 'despesa');

-- Formas de pagamento (caso não existam)
INSERT IGNORE INTO `formas_pagamento` (`id`, `nome`, `status`) VALUES
(1, 'Dinheiro', 'ativo'),
(2, 'PIX', 'ativo'),
(3, 'Cartão de Crédito', 'ativo'),
(4, 'Cartão de Débito', 'ativo'),
(5, 'Boleto Bancário', 'ativo'),
(6, 'Transferência Bancária', 'ativo'),
(7, 'Cheque', 'ativo');
