-- ============================================================
-- DOMURA — Gestão de Fees
-- Schema MySQL — instalar via phpMyAdmin ou linha de comandos
-- ============================================================

SET NAMES utf8mb4;
SET time_zone = '+00:00';

-- ------------------------------------------------------------
-- Tabela: users (Master, Agência, Consultor)
-- ------------------------------------------------------------
CREATE TABLE `users` (
  `id`           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `name`         VARCHAR(120) NOT NULL,
  `email`        VARCHAR(180) NOT NULL UNIQUE,
  `password`     VARCHAR(255) NOT NULL,
  `role`         ENUM('master','agencia','consultor') NOT NULL DEFAULT 'consultor',
  `agencia_id`   INT UNSIGNED NULL,
  `consultor_id` INT UNSIGNED NULL,
  `remember_token` VARCHAR(100) NULL,
  `created_at`   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at`   TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: agencias
-- ------------------------------------------------------------
CREATE TABLE `agencias` (
  `id`         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `nome`       VARCHAR(120) NOT NULL,
  `email`      VARCHAR(180) NULL,
  `telefone`   VARCHAR(30) NULL,
  `morada`     VARCHAR(255) NULL,
  `ativa`      TINYINT(1) NOT NULL DEFAULT 1,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: consultores
-- ------------------------------------------------------------
CREATE TABLE `consultores` (
  `id`             INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `agencia_id`     INT UNSIGNED NOT NULL,
  `nome`           VARCHAR(120) NOT NULL,
  `email`          VARCHAR(180) NOT NULL,
  `telefone`       VARCHAR(30) NULL,
  `data_entrada`   DATE NOT NULL,
  `modalidade`     ENUM('antecipado','comissao') NOT NULL DEFAULT 'antecipado',
  `fee_anual`      DECIMAL(8,2) NOT NULL DEFAULT 300.00,
  `fee_mensal`     DECIMAL(8,2) NOT NULL DEFAULT 25.00,
  `ativo`          TINYINT(1) NOT NULL DEFAULT 1,
  `notas`          TEXT NULL,
  `created_at`     TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at`     TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_consultor_agencia` FOREIGN KEY (`agencia_id`) REFERENCES `agencias`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: anuidades (cada ciclo de 12 meses por consultor)
-- ------------------------------------------------------------
CREATE TABLE `anuidades` (
  `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `consultor_id`  INT UNSIGNED NOT NULL,
  `data_inicio`   DATE NOT NULL,
  `data_fim`      DATE NOT NULL,
  `valor_total`   DECIMAL(8,2) NOT NULL DEFAULT 300.00,
  `estado`        ENUM('ativa','concluida','cancelada') NOT NULL DEFAULT 'ativa',
  `created_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_anuidade_consultor` FOREIGN KEY (`consultor_id`) REFERENCES `consultores`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: pagamentos (registo de cada fee mensal)
-- ------------------------------------------------------------
CREATE TABLE `pagamentos` (
  `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `consultor_id`  INT UNSIGNED NOT NULL,
  `anuidade_id`   INT UNSIGNED NOT NULL,
  `mes`           TINYINT UNSIGNED NOT NULL COMMENT '1-12',
  `ano`           SMALLINT UNSIGNED NOT NULL,
  `valor`         DECIMAL(8,2) NOT NULL DEFAULT 25.00,
  `estado`        ENUM('pendente','pago','atraso') NOT NULL DEFAULT 'pendente',
  `modalidade`    ENUM('antecipado','comissao') NOT NULL,
  `data_pagamento` DATE NULL,
  `referencia`    VARCHAR(60) NULL,
  `notas`         TEXT NULL,
  `registado_por` INT UNSIGNED NULL COMMENT 'user_id que registou',
  `created_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  CONSTRAINT `fk_pagamento_consultor` FOREIGN KEY (`consultor_id`) REFERENCES `consultores`(`id`),
  CONSTRAINT `fk_pagamento_anuidade` FOREIGN KEY (`anuidade_id`) REFERENCES `anuidades`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: email_templates (textos editáveis)
-- ------------------------------------------------------------
CREATE TABLE `email_templates` (
  `id`         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `codigo`     VARCHAR(60) NOT NULL UNIQUE COMMENT 'dia1_aviso | dia5_reminder | dia9_atraso',
  `nome`       VARCHAR(120) NOT NULL,
  `assunto`    VARCHAR(255) NOT NULL,
  `corpo`      LONGTEXT NOT NULL COMMENT 'HTML com placeholders {{nome}}, {{mes}}, {{valor}}, {{anuidade}}',
  `ativo`      TINYINT(1) NOT NULL DEFAULT 1,
  `editado_por` INT UNSIGNED NULL,
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- Tabela: email_log (histórico de todos os envios)
-- ------------------------------------------------------------
CREATE TABLE `email_log` (
  `id`            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `template_id`   INT UNSIGNED NULL,
  `consultor_id`  INT UNSIGNED NOT NULL,
  `para`          VARCHAR(180) NOT NULL,
  `cc`            VARCHAR(180) NULL,
  `assunto`       VARCHAR(255) NOT NULL,
  `corpo`         LONGTEXT NOT NULL,
  `mes`           TINYINT UNSIGNED NULL,
  `ano`           SMALLINT UNSIGNED NULL,
  `tipo`          ENUM('dia1_aviso','dia5_reminder','dia9_atraso','manual') NOT NULL,
  `estado`        ENUM('enviado','erro') NOT NULL DEFAULT 'enviado',
  `erro_detalhe`  TEXT NULL,
  `enviado_em`    TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT `fk_log_template` FOREIGN KEY (`template_id`) REFERENCES `email_templates`(`id`) ON DELETE SET NULL,
  CONSTRAINT `fk_log_consultor` FOREIGN KEY (`consultor_id`) REFERENCES `consultores`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================
-- DADOS INICIAIS
-- ============================================================

-- Agências de exemplo
INSERT INTO `agencias` (`nome`, `email`) VALUES
  ('Domura Lisboa', 'lisboa@domura.pt'),
  ('Domura Porto',  'porto@domura.pt'),
  ('Domura Setúbal','setubal@domura.pt');

-- Utilizador master (password: Domura2025! — alterar após instalação)
-- Hash bcrypt gerado pelo Laravel: php artisan tinker -> bcrypt('Domura2025!')
INSERT INTO `users` (`name`,`email`,`password`,`role`) VALUES
  ('Administrador','admin@domura.pt','$2y$12$PLACEHOLDER_HASH_CHANGE_ME','master');

-- Templates de email padrão
INSERT INTO `email_templates` (`codigo`,`nome`,`assunto`,`corpo`) VALUES
('dia1_aviso',
 'Aviso de cobrança — dia 1',
 'Fee mensal Domura — {{mes_nome}} {{ano}}',
 '<p>Olá {{nome}},</p>
<p>O teu fee mensal de <strong>{{valor}} €</strong> referente a <strong>{{mes_nome}} {{ano}}</strong> está disponível para pagamento.</p>
<p>A tua anuidade está ativa de <strong>{{anuidade_inicio}}</strong> a <strong>{{anuidade_fim}}</strong>.</p>
<p>Modalidade: <strong>{{modalidade}}</strong>.</p>
<p>Para qualquer dúvida, contacta a tua agência.</p>
<p>Com os melhores cumprimentos,<br>Equipa Domura</p>'),

('dia5_reminder',
 'Reminder de pagamento — dia 5',
 '[Lembrete] Fee mensal Domura — {{mes_nome}} {{ano}}',
 '<p>Olá {{nome}},</p>
<p>Este é um lembrete de que o teu fee de <strong>{{valor}} €</strong> referente a <strong>{{mes_nome}} {{ano}}</strong> ainda não foi registado.</p>
<p>Por favor procede ao pagamento até ao final desta semana para evitar marcação de atraso.</p>
<p>Com os melhores cumprimentos,<br>Equipa Domura</p>'),

('dia9_atraso',
 'Aviso de atraso — dia 9',
 '[ATRASO] Fee de {{mes_nome}} {{ano}} em falta — Domura',
 '<p>Olá {{nome}},</p>
<p>O teu fee de <strong>{{valor}} €</strong> referente a <strong>{{mes_nome}} {{ano}}</strong> encontra-se em atraso.</p>
<p>Por favor regulariza a situação com urgência contactando a tua agência.</p>
<p>Com os melhores cumprimentos,<br>Equipa Domura</p>');
