-- =====================================================================
-- MIGRAÇÃO DA BASE DE DADOS SEGUNOR PARA VERSÃO DEV
-- Script SEM backups - Criação de tabelas novas e alterações estruturais
-- =====================================================================

SET FOREIGN_KEY_CHECKS = 0;
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

-- =====================================================================
-- 1. TABELAS COMPLETAMENTE NOVAS (não existem em SEGUNOR)
-- =====================================================================

-- Ausências de Funcionários
CREATE TABLE IF NOT EXISTS `ausencias` (
  `id_ausencia` int(11) NOT NULL AUTO_INCREMENT,
  `nif` varchar(9) NOT NULL,
  `tipo` varchar(50) NOT NULL,
  `data_inicio` date NOT NULL,
  `data_fim` date NOT NULL,
  `dias_contabilizados` int(11) DEFAULT 1,
  `observacoes` text DEFAULT NULL,
  `comprovativo` varchar(255) DEFAULT NULL,
  `registado_em` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id_ausencia`),
  KEY `nif_idx` (`nif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Sistema Central - Utilizadores
CREATE TABLE IF NOT EXISTS `centralistas_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `nome` varchar(100) DEFAULT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  `ultimo_acesso` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `central_system_logs` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `acao` varchar(50) NOT NULL,
  `detalhes` text DEFAULT NULL,
  `ip_address` varchar(45) DEFAULT NULL,
  `data_registo` timestamp NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `central_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  `ultimo_login` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Feriados
CREATE TABLE IF NOT EXISTS `feriados` (
  `data` date NOT NULL,
  `descricao` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`data`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Logs de Ausências
CREATE TABLE IF NOT EXISTS `log_ausencias` (
  `id_log` int(11) NOT NULL AUTO_INCREMENT,
  `nif` varchar(20) NOT NULL,
  `user` varchar(50) DEFAULT NULL,
  `data_hora` datetime DEFAULT current_timestamp(),
  `acao` varchar(50) DEFAULT NULL,
  `tipo_ausencia` varchar(50) DEFAULT NULL,
  `detalhes` text DEFAULT NULL,
  PRIMARY KEY (`id_log`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Contactos de Funcionários
CREATE TABLE IF NOT EXISTS `funcionarios_contactos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `funcionario_id` int(11) NOT NULL,
  `tipo` enum('Pessoal','Emergencia','Familiar','Outro') DEFAULT 'Pessoal',
  `numero` varchar(20) NOT NULL,
  `obs` varchar(100) DEFAULT NULL,
  `ordem` int(11) DEFAULT 1,
  `data_atualizacao` timestamp NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Adendas de Processos
CREATE TABLE IF NOT EXISTS `processo_adendas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_processo` int(11) DEFAULT NULL,
  `numero_adenda` varchar(50) DEFAULT NULL,
  `data_adenda` date DEFAULT NULL,
  `estado_adenda` varchar(50) DEFAULT 'Por Assinar',
  `descricao` text DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `id_processo` (`id_processo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Status Plataforma RH
CREATE TABLE IF NOT EXISTS `status_plataforma_rh` (
  `id_processo` int(11) NOT NULL,
  `status` varchar(50) DEFAULT 'Não',
  PRIMARY KEY (`id_processo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tamanhos de Fardamento
CREATE TABLE IF NOT EXISTS `fardamento_tamanhos` (
  `tipo` varchar(30) NOT NULL,
  `tamanho` varchar(5) NOT NULL,
  `ordem` int(11) DEFAULT NULL,
  PRIMARY KEY (`tipo`,`tamanho`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Popular fardamento_tamanhos
INSERT IGNORE INTO fardamento_tamanhos (tipo, tamanho, ordem) VALUES
('Blusao', 'S', 1), ('Blusao', 'M', 2), ('Blusao', 'L', 3), ('Blusao', 'XL', 4), ('Blusao', '2XL', 5), ('Blusao', '3XL', 6), ('Blusao', '4XL', 7),
('Polar', 'S', 1), ('Polar', 'M', 2), ('Polar', 'L', 3), ('Polar', 'XL', 4), ('Polar', '2XL', 5), ('Polar', '3XL', 6), ('Polar', '4XL', 7),
('Polo', 'S', 1), ('Polo', 'M', 2), ('Polo', 'L', 3), ('Polo', 'XL', 4), ('Polo', '2XL', 5), ('Polo', '3XL', 6), ('Polo', '4XL', 7),
('T-Shirt', 'S', 1), ('T-Shirt', 'M', 2), ('T-Shirt', 'L', 3), ('T-Shirt', 'XL', 4), ('T-Shirt', '2XL', 5), ('T-Shirt', '3XL', 6), ('T-Shirt', '4XL', 7),
('Camisa', 'S', 1), ('Camisa', 'M', 2), ('Camisa', 'L', 3), ('Camisa', 'XL', 4), ('Camisa', '2XL', 5), ('Camisa', '3XL', 6), ('Camisa', '4XL', 7),
('Calcas Taticas', '38', 1), ('Calcas Taticas', '40', 2), ('Calcas Taticas', '42', 3), ('Calcas Taticas', '44', 4),
('Calcas Taticas', '46', 5), ('Calcas Taticas', '48', 6), ('Calcas Taticas', '50', 7), ('Calcas Taticas', '52', 8),
('Calcas Taticas', '54', 9), ('Calcas Taticas', '56', 10),
('Calcas Classicas', '38', 1), ('Calcas Classicas', '40', 2), ('Calcas Classicas', '42', 3), ('Calcas Classicas', '44', 4),
('Calcas Classicas', '46', 5), ('Calcas Classicas', '48', 6), ('Calcas Classicas', '50', 7), ('Calcas Classicas', '52', 8),
('Calcas Classicas', '54', 9), ('Calcas Classicas', '56', 10),
('Bone', 'TU', 1), ('Simbolo', 'TU', 1), ('Gravata', 'TU', 1), ('Fita', 'TU', 1);

-- =====================================================================
-- 2. MÓDULO DE CLIENTES (TABELAS RELACIONADAS)
-- =====================================================================

-- Adendas de Clientes
CREATE TABLE IF NOT EXISTS `clientes_adendas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `numero_adenda` varchar(50) DEFAULT NULL,
  `data_adenda` date DEFAULT NULL,
  `estado_adenda` varchar(50) DEFAULT 'Por Assinar',
  `descricao` text DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `numero_contrato` (`numero_contrato`),
  CONSTRAINT `clientes_adendas_ibfk_1` FOREIGN KEY (`numero_contrato`) REFERENCES `clientes` (`numero_contrato`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Documentos de Clientes
CREATE TABLE IF NOT EXISTS `clientes_docs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `titulo` varchar(100) DEFAULT NULL,
  `tipo_doc` varchar(50) DEFAULT NULL,
  `nome_ficheiro` varchar(255) DEFAULT NULL,
  `data_upload` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `numero_contrato` (`numero_contrato`),
  CONSTRAINT `clientes_docs_ibfk_1` FOREIGN KEY (`numero_contrato`) REFERENCES `clientes` (`numero_contrato`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Equipamentos de Clientes
CREATE TABLE IF NOT EXISTS `clientes_equipamentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `tipo` varchar(50) DEFAULT NULL,
  `quantidade` int(11) DEFAULT 1,
  `marca` varchar(100) DEFAULT NULL,
  `modelo` varchar(100) DEFAULT NULL,
  `num_serie` varchar(100) DEFAULT NULL,
  `data_instalacao` date DEFAULT NULL,
  `imei1` varchar(50) DEFAULT NULL,
  `imei2` varchar(50) DEFAULT NULL,
  `num_cartao` varchar(50) DEFAULT NULL,
  `num_telemovel` varchar(50) DEFAULT NULL,
  `descricao_extra` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `numero_contrato` (`numero_contrato`),
  CONSTRAINT `clientes_equipamentos_ibfk_1` FOREIGN KEY (`numero_contrato`) REFERENCES `clientes` (`numero_contrato`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Pontos de Ronda
CREATE TABLE IF NOT EXISTS `clientes_rondas_pontos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `ordem` int(11) DEFAULT NULL,
  `nome_ponto` varchar(100) DEFAULT NULL,
  `descricao_local` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `numero_contrato` (`numero_contrato`),
  CONSTRAINT `clientes_rondas_pontos_ibfk_1` FOREIGN KEY (`numero_contrato`) REFERENCES `clientes` (`numero_contrato`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Serviços de Clientes
CREATE TABLE IF NOT EXISTS `clientes_servicos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `especialidade` varchar(50) DEFAULT NULL,
  `quantidade` int(11) DEFAULT 1,
  `dias` varchar(100) DEFAULT NULL,
  `horario` varchar(100) DEFAULT NULL,
  `preco` decimal(10,2) DEFAULT 0.00,
  `descricao_preco` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `numero_contrato` (`numero_contrato`),
  CONSTRAINT `clientes_servicos_ibfk_1` FOREIGN KEY (`numero_contrato`) REFERENCES `clientes` (`numero_contrato`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Log de Equipamentos
CREATE TABLE IF NOT EXISTS `log_equipamentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_contrato` varchar(50) DEFAULT NULL,
  `data_hora` datetime DEFAULT NULL,
  `user` varchar(50) DEFAULT NULL,
  `acao` text DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 3. CORRESPONDÊNCIA
-- =====================================================================

CREATE TABLE IF NOT EXISTS `correspondencia_entrada` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_rececao` date NOT NULL,
  `hora_rececao` time NOT NULL,
  `remetente` varchar(255) NOT NULL,
  `tipo_entrega` varchar(50) DEFAULT NULL,
  `n_tracking` varchar(100) DEFAULT NULL,
  `recebido_por` varchar(100) DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `correspondencia_entrada_itens` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_entrada` int(11) NOT NULL,
  `tipo_documento` varchar(100) DEFAULT NULL,
  `referencia` varchar(255) DEFAULT NULL,
  `descricao` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_entrada` (`id_entrada`),
  CONSTRAINT `correspondencia_entrada_itens_ibfk_1` FOREIGN KEY (`id_entrada`) REFERENCES `correspondencia_entrada` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `correspondencia_saida` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data_envio` date NOT NULL,
  `destinatario` varchar(255) NOT NULL,
  `tipo_envio` varchar(50) DEFAULT NULL,
  `conteudo` text NOT NULL,
  `n_tracking` varchar(100) DEFAULT NULL,
  `custo` decimal(10,2) DEFAULT NULL,
  `enviado_por` varchar(100) DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 4. ORÇAMENTOS (NOVA ESTRUTURA COMPLETA)
-- =====================================================================

CREATE TABLE IF NOT EXISTS `orcamentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `numero_orcamento` varchar(20) DEFAULT NULL,
  `sequencial` int(11) DEFAULT NULL,
  `ano` int(11) DEFAULT NULL,
  `data_registo` date DEFAULT NULL,
  `cliente_nome` varchar(255) DEFAULT NULL,
  `cliente_nif` varchar(20) DEFAULT NULL,
  `cliente_responsavel` varchar(100) DEFAULT NULL,
  `cliente_email` varchar(100) DEFAULT NULL,
  `cliente_telefone` varchar(50) DEFAULT NULL,
  `cliente_morada` text DEFAULT NULL,
  `zona` varchar(50) DEFAULT NULL,
  `local_servico` varchar(255) DEFAULT NULL,
  `tipo_servico` varchar(100) DEFAULT NULL,
  `regime` varchar(100) DEFAULT NULL,
  `n_elementos` int(11) DEFAULT 0,
  `valor` decimal(10,2) DEFAULT 0.00,
  `unidade` varchar(50) DEFAULT NULL,
  `estado` enum('Em Aberto','Adjudicado','Não Adjudicado','Sem Resposta','Cancelado') DEFAULT 'Em Aberto',
  `data_validade` date DEFAULT NULL,
  `motivo_rejeicao` text DEFAULT NULL,
  `obs_internas` text DEFAULT NULL,
  `criado_por` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `ano` (`ano`),
  KEY `estado` (`estado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `log_orcamentos_geral` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_orcamento` int(11) DEFAULT NULL,
  `data` datetime DEFAULT current_timestamp(),
  `user` varchar(50) DEFAULT NULL,
  `acao` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_orcamento` (`id_orcamento`),
  CONSTRAINT `log_orcamentos_geral_ibfk_1` FOREIGN KEY (`id_orcamento`) REFERENCES `orcamentos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 5. ESCALAS (SISTEMA COMPLETO)
-- =====================================================================

CREATE TABLE IF NOT EXISTS `escalas_postos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `cliente_id` varchar(50) DEFAULT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `escalas_postos_staff` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `posto_id` int(11) NOT NULL,
  `nif` varchar(9) NOT NULL,
  `nome_funcionario` varchar(255) DEFAULT NULL,
  `valido_desde` date NOT NULL,
  `valido_ate` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `posto_id` (`posto_id`,`nif`),
  CONSTRAINT `escalas_postos_staff_ibfk_1` FOREIGN KEY (`posto_id`) REFERENCES `escalas_postos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `escalas_turnos_config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `posto_id` int(11) NOT NULL,
  `nome` varchar(50) NOT NULL,
  `hora_entrada` time NOT NULL,
  `hora_saida` time NOT NULL,
  `ativo` tinyint(1) DEFAULT 1,
  PRIMARY KEY (`id`),
  KEY `posto_id` (`posto_id`),
  CONSTRAINT `escalas_turnos_config_ibfk_1` FOREIGN KEY (`posto_id`) REFERENCES `escalas_postos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `escalas_cabecalho` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `posto_id` int(11) NOT NULL,
  `mes` int(11) NOT NULL,
  `ano` int(11) NOT NULL,
  `estado` enum('Rascunho','Publicada','Fechada') DEFAULT 'Rascunho',
  `data_criacao` datetime DEFAULT current_timestamp(),
  `criado_por` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_escala` (`posto_id`,`mes`,`ano`),
  CONSTRAINT `escalas_cabecalho_ibfk_1` FOREIGN KEY (`posto_id`) REFERENCES `escalas_postos` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `escalas_dados` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `escala_id` int(11) NOT NULL,
  `dia` int(11) NOT NULL,
  `nif_funcionario` varchar(9) NOT NULL,
  `nome_funcionario` varchar(255) DEFAULT NULL,
  `turno_nome` varchar(50) DEFAULT NULL,
  `hora_entrada` time DEFAULT NULL,
  `hora_saida` time DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `escala_id` (`escala_id`),
  KEY `nif_funcionario` (`nif_funcionario`,`dia`),
  CONSTRAINT `escalas_dados_ibfk_1` FOREIGN KEY (`escala_id`) REFERENCES `escalas_cabecalho` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `escalas_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `escala_id` int(11) DEFAULT NULL,
  `utilizador` varchar(100) DEFAULT NULL,
  `acao` varchar(255) DEFAULT NULL,
  `detalhes` text DEFAULT NULL,
  `data_hora` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  KEY `escala_id` (`escala_id`),
  CONSTRAINT `escalas_logs_ibfk_1` FOREIGN KEY (`escala_id`) REFERENCES `escalas_cabecalho` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 6. GESTÃO DE FROTA (NOVA ESTRUTURA)
-- =====================================================================

-- Nova estrutura de viaturas
CREATE TABLE IF NOT EXISTS `viaturas_new` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `matricula` varchar(8) NOT NULL,
  `marca` varchar(50) DEFAULT NULL,
  `modelo` varchar(50) DEFAULT NULL,
  `ano` int(4) DEFAULT NULL,
  `n_quadro` varchar(100) DEFAULT NULL,
  `cor` varchar(30) DEFAULT NULL,
  `kms` int(10) DEFAULT 0,
  `estado` varchar(20) DEFAULT 'Disponivel',
  `data_compra` date DEFAULT NULL,
  `valor_compra` decimal(10,2) DEFAULT NULL,
  `fornecedor_compra` varchar(100) DEFAULT NULL,
  `seguro_companhia` varchar(100) DEFAULT NULL,
  `seguro_apolice` varchar(100) DEFAULT NULL,
  `seguro_validade` date DEFAULT NULL,
  `iuc_validade` date DEFAULT NULL,
  `proxima_inspecao_data` date DEFAULT NULL,
  `proxima_revisao_kms` int(10) DEFAULT NULL,
  `proxima_revisao_data` date DEFAULT NULL,
  `gps_tipo` enum('Nenhum','Contrato','Proprio') DEFAULT 'Nenhum',
  `gps_telemovel` varchar(20) DEFAULT NULL,
  `gps_fidelizacao` date DEFAULT NULL,
  `gps_marca` varchar(50) DEFAULT NULL,
  `gps_modelo` varchar(50) DEFAULT NULL,
  `gps_imei` varchar(50) DEFAULT NULL,
  `gps_data_compra` date DEFAULT NULL,
  `gps_garantia_ate` date DEFAULT NULL,
  `notas` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `matricula` (`matricula`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `stock_oficina` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `produto` varchar(100) DEFAULT NULL,
  `quantidade_atual` decimal(10,2) DEFAULT NULL,
  `unidade` varchar(20) DEFAULT NULL,
  `tipo_controlo` enum('Fluido','Unidade') DEFAULT 'Unidade',
  `quantidade_minima` int(11) DEFAULT NULL,
  `localizacao` varchar(50) DEFAULT NULL,
  `ultima_atualizacao` datetime DEFAULT current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Popular stock inicial
INSERT IGNORE INTO stock_oficina (produto, quantidade_atual, unidade, tipo_controlo, quantidade_minima, localizacao) VALUES 
('Oleo Motor 5W30', 20.00, 'Litros', 'Fluido', 5, 'Armario 1'),
('Liquido Limpa Vidros', 10.00, 'Garrafas', 'Fluido', 2, 'Estante A'),
('AdBlue', 50.00, 'Litros', 'Fluido', 10, 'Tanque'),
('Lampadas H7', 10.00, 'Unidades', 'Unidade', 2, 'Gaveta 3'),
('Escovas Limpa Para-brisas', 4.00, 'Pares', 'Unidade', 1, 'Estante B');

CREATE TABLE IF NOT EXISTS `verificacoes_frota` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `viatura_id` int(11) DEFAULT NULL,
  `user_username` varchar(50) DEFAULT NULL,
  `responsavel_nome` varchar(100) DEFAULT NULL,
  `data_hora` datetime DEFAULT current_timestamp(),
  `kms_atuais` int(11) DEFAULT NULL,
  `estado_oleo` varchar(20) DEFAULT 'OK',
  `estado_agua` varchar(20) DEFAULT 'OK',
  `estado_escovas` varchar(20) DEFAULT 'OK',
  `estado_pneus` varchar(20) DEFAULT 'OK',
  `estado_luzes` varchar(20) DEFAULT 'OK',
  `limpeza_interior` varchar(20) DEFAULT 'OK',
  `limpeza_exterior` varchar(20) DEFAULT 'OK',
  `novos_danos` char(3) DEFAULT 'Nao',
  `descricao_danos` text DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `stock_consumido_log` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `viatura_id` (`viatura_id`),
  CONSTRAINT `verificacoes_frota_ibfk_1` FOREIGN KEY (`viatura_id`) REFERENCES `viaturas_new` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `manutencoes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `viatura_id` int(11) DEFAULT NULL,
  `user_username` varchar(50) DEFAULT NULL,
  `responsavel_nome` varchar(100) DEFAULT NULL,
  `tipo` enum('Preventiva','Corretiva','Pneus','Inspecao','Sinistro','Legal') DEFAULT 'Preventiva',
  `data_manutencao` date DEFAULT NULL,
  `kms_na_manutencao` int(11) DEFAULT NULL,
  `oficina_fornecedor` varchar(100) DEFAULT NULL,
  `descricao_detalhada` text DEFAULT NULL,
  `pecas_aplicadas` text DEFAULT NULL,
  `custo_total` decimal(10,2) DEFAULT NULL,
  `fatura_anexo` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `viatura_id` (`viatura_id`),
  CONSTRAINT `manutencoes_ibfk_1` FOREIGN KEY (`viatura_id`) REFERENCES `viaturas_new` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 7. SISTEMA DE TOQUES (CENTRAL)
-- =====================================================================

CREATE TABLE IF NOT EXISTS `toques_config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cliente_contrato` varchar(50) NOT NULL,
  `designacao_posto` varchar(100) DEFAULT NULL,
  `hora_inicio` time DEFAULT '22:00:00',
  `hora_fim` time DEFAULT '06:00:00',
  `frequencia_min` int(11) DEFAULT 60,
  `ativo` tinyint(1) DEFAULT 1,
  `dias_excecao` varchar(50) DEFAULT NULL,
  `hora_inicio_rondas` time DEFAULT '22:00:00',
  `data_inicio` date DEFAULT '2024-01-01',
  `data_fim` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `toques_horarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `config_id` int(11) NOT NULL,
  `dia_semana` int(11) NOT NULL,
  `hora_entrada` time NOT NULL,
  `hora_saida` time NOT NULL,
  `ativo` tinyint(4) DEFAULT 1,
  `hora_inicio_rondas` time DEFAULT '22:00:00',
  `hora_fim_rondas` time DEFAULT '06:00:00',
  `frequencia_min` int(11) DEFAULT 60,
  PRIMARY KEY (`id`),
  UNIQUE KEY `config_id` (`config_id`,`dia_semana`),
  CONSTRAINT `toques_horarios_ibfk_1` FOREIGN KEY (`config_id`) REFERENCES `toques_config` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `toques_logs` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `data_operacional` date NOT NULL,
  `cliente_contrato` varchar(50) NOT NULL,
  `funcionario_id` int(11) DEFAULT NULL,
  `hora_prevista` datetime NOT NULL,
  `hora_registada` datetime DEFAULT NULL,
  `estado` enum('Pendente','OK','Atraso','Falha','Justificado') DEFAULT 'Pendente',
  `user_registou` int(11) DEFAULT NULL,
  `data_registo` timestamp NULL DEFAULT current_timestamp(),
  `hora_toque_manual` datetime DEFAULT NULL,
  `editado_por` int(11) DEFAULT NULL,
  `data_edicao` datetime DEFAULT NULL,
  `tipo_slot` enum('Entrada','Ronda','Saida') DEFAULT 'Ronda',
  PRIMARY KEY (`id`),
  KEY `idx_toques_data` (`data_operacional`,`cliente_contrato`),
  KEY `idx_toques_estado` (`estado`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `toques_alertas` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log_id` bigint(20) NOT NULL,
  `hora_alerta` datetime DEFAULT current_timestamp(),
  `tentativas_contato` int(11) DEFAULT 0,
  `atendeu` tinyint(1) DEFAULT 0,
  `motivo` text DEFAULT NULL,
  `resolvido_por` int(11) DEFAULT NULL,
  `data_resolucao` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `log_id` (`log_id`),
  CONSTRAINT `toques_alertas_ibfk_1` FOREIGN KEY (`log_id`) REFERENCES `toques_logs` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 8. FARDAMENTO (NORMALIZAÇÃO - ITENS SEPARADOS)
-- =====================================================================

-- Novas tabelas normalizadas
CREATE TABLE IF NOT EXISTS `itens_dispensa` (
  `ndispensa` int(10) NOT NULL,
  `tipo` varchar(30) NOT NULL,
  `tamanho` varchar(5) NOT NULL,
  `quantidade` int(5) DEFAULT NULL,
  `preco` decimal(6,2) DEFAULT NULL,
  PRIMARY KEY (`ndispensa`,`tipo`,`tamanho`),
  KEY `idx_itens_dispensa_lookup` (`tipo`,`tamanho`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `itens_retoma` (
  `nretoma` int(10) NOT NULL,
  `tipo` varchar(30) NOT NULL,
  `tamanho` varchar(5) NOT NULL,
  `quantidade` int(5) DEFAULT NULL,
  `destruido` int(5) DEFAULT NULL,
  `preco` decimal(6,2) DEFAULT 0.00,
  PRIMARY KEY (`nretoma`,`tipo`,`tamanho`),
  KEY `idx_itens_retoma_lookup` (`tipo`,`tamanho`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Declarações Pendentes
CREATE TABLE IF NOT EXISTS `declaracoes_pendentes` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `ndispensa` int(10) NOT NULL,
  `nif` int(9) NOT NULL,
  `funcionario` varchar(100) DEFAULT NULL,
  `zona` varchar(50) DEFAULT NULL,
  `data_dispensa` date DEFAULT NULL,
  `data_registo` datetime DEFAULT current_timestamp(),
  `estado` enum('Falta assinar','Assinado') DEFAULT 'Falta assinar',
  `data_assinatura` datetime DEFAULT NULL,
  `assinatura_recolhida_por` varchar(50) DEFAULT NULL,
  `notas` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_estado` (`estado`),
  KEY `idx_nif` (`nif`),
  KEY `idx_zona` (`zona`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- =====================================================================
-- 9. ALTERAÇÕES EM TABELAS EXISTENTES
-- =====================================================================

-- CLIENTES - Adicionar novos campos
ALTER TABLE `clientes` 
  ADD COLUMN `email` varchar(100) DEFAULT NULL AFTER `nome_empresa`,
  ADD COLUMN `contacto` varchar(50) DEFAULT NULL AFTER `email`,
  MODIFY COLUMN `zona` varchar(50) DEFAULT NULL,
  MODIFY COLUMN `designacao_comercial` varchar(100) DEFAULT NULL,
  MODIFY COLUMN `morada_servico` varchar(255) DEFAULT NULL,
  MODIFY COLUMN `nome_empresa` varchar(100) DEFAULT NULL,
  MODIFY COLUMN `morada_sede` varchar(255) DEFAULT NULL,
  MODIFY COLUMN `nif` varchar(20) DEFAULT NULL,
  MODIFY COLUMN `data_inicio` date DEFAULT NULL,
  MODIFY COLUMN `data_fim` date DEFAULT NULL,
  MODIFY COLUMN `duracao` varchar(50) DEFAULT NULL,
  MODIFY COLUMN `estado_contrato` varchar(50) DEFAULT NULL,
  ADD COLUMN `estado` varchar(20) DEFAULT 'Ativo' AFTER `estado_contrato`,
  ADD COLUMN `tem_rondas` varchar(3) DEFAULT 'Não' AFTER `natureza`,
  ADD COLUMN `qtd_pontos_ronda` int(11) DEFAULT 0 AFTER `tem_rondas`,
  ADD COLUMN `frequencia_rondas` varchar(100) DEFAULT NULL AFTER `qtd_pontos_ronda`;

-- Remover campos antigos de clientes (que agora vão para outras tabelas)
ALTER TABLE `clientes`
  DROP COLUMN `horario`,
  DROP COLUMN `n_elementos`,
  DROP COLUMN `especialidade`,
  DROP COLUMN `n_equipamentos`,
  DROP COLUMN `tipo_equipamento`,
  DROP COLUMN `marca`,
  DROP COLUMN `modelo`;

-- CONTA_CORRENTE - Adicionar chave primária
ALTER TABLE `conta_corrente` 
  MODIFY COLUMN `zona` varchar(50) NOT NULL;
  
ALTER TABLE `conta_corrente`
  ADD PRIMARY KEY (`zona`);

-- DISPENSA_FARDAMENTO - Simplificar estrutura
ALTER TABLE `dispensa_fardamento`
  DROP COLUMN `npedido`,
  DROP COLUMN `tipo1`, DROP COLUMN `tamanho1`, DROP COLUMN `quantidade1`,
  DROP COLUMN `tipo2`, DROP COLUMN `tamanho2`, DROP COLUMN `quantidade2`,
  DROP COLUMN `tipo3`, DROP COLUMN `tamanho3`, DROP COLUMN `quantidade3`,
  DROP COLUMN `tipo4`, DROP COLUMN `tamanho4`, DROP COLUMN `quantidade4`,
  DROP COLUMN `tipo5`, DROP COLUMN `tamanho5`, DROP COLUMN `quantidade5`,
  DROP COLUMN `tipo6`, DROP COLUMN `tamanho6`, DROP COLUMN `quantidade6`,
  DROP COLUMN `aprovado_por`,
  MODIFY COLUMN `data` date DEFAULT NULL,
  MODIFY COLUMN `total` decimal(10,2) DEFAULT 0.00;

ALTER TABLE `dispensa_fardamento`
  ADD KEY `idx_dispensa_nif_zona` (`nif`,`zona`,`data`);

-- RETOMA_FARDAMENTO - Simplificar estrutura
ALTER TABLE `retoma_fardamento`
  DROP COLUMN `npedido`,
  DROP COLUMN `tipo1`, DROP COLUMN `tamanho1`, DROP COLUMN `quantidade1`, DROP COLUMN `estado1`,
  DROP COLUMN `tipo2`, DROP COLUMN `tamanho2`, DROP COLUMN `quantidade2`, DROP COLUMN `estado2`,
  DROP COLUMN `tipo3`, DROP COLUMN `tamanho3`, DROP COLUMN `quantidade3`, DROP COLUMN `estado3`,
  DROP COLUMN `tipo4`, DROP COLUMN `tamanho4`, DROP COLUMN `quantidade4`, DROP COLUMN `estado4`,
  DROP COLUMN `tipo5`, DROP COLUMN `tamanho5`, DROP COLUMN `quantidade5`, DROP COLUMN `estado5`,
  DROP COLUMN `tipo6`, DROP COLUMN `tamanho6`, DROP COLUMN `quantidade6`, DROP COLUMN `estado6`,
  DROP COLUMN `aprovado_por`,
  MODIFY COLUMN `data` date DEFAULT NULL,
  MODIFY COLUMN `total` decimal(10,2) DEFAULT 0.00;

ALTER TABLE `retoma_fardamento`
  ADD KEY `idx_retoma_nif_zona` (`nif`,`zona`,`data`);

-- LOG_CONTA_CORRENTE - Adicionar campo nretoma e chave primária
ALTER TABLE `log_conta_corrente`
  ADD COLUMN `id_log` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST,
  ADD COLUMN `nretoma` int(10) DEFAULT NULL AFTER `ndispensa`,
  MODIFY COLUMN `data` date DEFAULT NULL;

-- PRECARIO - Ajustar tamanho e adicionar chave
ALTER TABLE `precario`
  MODIFY COLUMN `artigo` varchar(30) NOT NULL,
  MODIFY COLUMN `preco` decimal(6,2) DEFAULT NULL;
  
ALTER TABLE `precario`
  ADD PRIMARY KEY (`artigo`);

-- POSSE_FUNCIONARIO - Adicionar chave primária
ALTER TABLE `posse_funcionario`
  ADD PRIMARY KEY (`nif`,`tipo`,`tamanho`);

-- REGISTO_CONTA_CORRENTE - Ajustar tipos
ALTER TABLE `registo_conta_corrente`
  MODIFY COLUMN `total` decimal(10,2) DEFAULT NULL,
  MODIFY COLUMN `data` date DEFAULT NULL;
  
ALTER TABLE `registo_conta_corrente`
  ADD PRIMARY KEY (`ndispensa`);

-- =====================================================================
-- 10. VIEWS
-- =====================================================================

DROP VIEW IF EXISTS `view_central_vigilantes`;

CREATE VIEW `view_central_vigilantes` AS
SELECT 
  `processo`.`id_processo` AS `id_processo`,
  `processo`.`nome` AS `nome`,
  `processo`.`zona1` AS `zona1`,
  `processo`.`especialidades` AS `especialidades`,
  `processo`.`local_servico` AS `local_servico`,
  `processo`.`contacto` AS `contacto`,
  'Ver Ficha' AS `acao`
FROM `processo`
WHERE `processo`.`estado` = 'Ativo';

-- =====================================================================
-- 11. MENSAGEM FINAL
-- =====================================================================

SET FOREIGN_KEY_CHECKS = 1;

SELECT '========================================' AS '';
SELECT 'MIGRAÇÃO ESTRUTURAL CONCLUÍDA!' AS '';
SELECT '========================================' AS '';
SELECT '' AS '';
SELECT 'CRIADAS:' AS '';
SELECT '- 38 novas tabelas' AS '';
SELECT '- Índices e chaves estrangeiras' AS '';
SELECT '- View atualizada' AS '';
SELECT '' AS '';
SELECT 'MODIFICADAS:' AS '';
SELECT '- clientes (novos campos + remoção de campos antigos)' AS '';
SELECT '- conta_corrente (PRIMARY KEY)' AS '';
SELECT '- dispensa_fardamento (simplificada)' AS '';
SELECT '- retoma_fardamento (simplificada)' AS '';
SELECT '- log_conta_corrente (novo campo)' AS '';
SELECT '- precario, posse_funcionario, registo_conta_corrente (chaves)' AS '';
SELECT '' AS '';
SELECT 'PRÓXIMOS PASSOS:' AS '';
SELECT '1. Migrar dados manualmente conforme necessário' AS '';
SELECT '2. Substituir tabela viaturas_new por viaturas' AS '';
SELECT '3. Popular tabelas novas com dados existentes' AS '';
SELECT '4. Testar aplicação' AS '';
SELECT '' AS '';