--drop database gestao_protek;
create database dev;
	use dev;

	create table zona(
		id int(2) primary key auto_increment,
		zona varchar(50),
		responsavel varchar(50),
		sigla varchar(3),
		estado varchar(8)
		);

	create table fardamento(
		tipo varchar (30),
		tamanho varchar(4),
		quantidade int(5)
		);
	
	create table precario( --subir na bd, alterei o tipo de armazenamento
		artigo varchar(20),
		preco DECIMAL(4, 2)
		);

	create table conta_corrente( --subir na bd, alterei o tipo de armazenamento; ex varchar(10)
		zona varchar(1000),
		valor_divida DECIMAL(10, 2),
		valor_credito DECIMAL(10, 2),
		total_pago DECIMAL(10, 2),
		dispensas_pagas text
		);

	create table pedido_dispensa_fardamento(
		npedido int(100) primary key,
		zona varchar(50),
		funcionario varchar(100),
		nif int(9),
		local_trabalho varchar(100),
		data varchar(10),
		tipo1 varchar (50),
		tamanho1 varchar(50),
		quantidade1 int(5),
		tipo2 varchar (50),
		tamanho2 varchar(50),
		quantidade2 int(5),
		tipo3 varchar (50),
		tamanho3 varchar(50),
		quantidade3 int(5),
		tipo4 varchar (50),
		tamanho4 varchar(50),
		quantidade4 int(5),
		tipo5 varchar (50),
		tamanho5 varchar(50),
		quantidade5 int(5),
		tipo6 varchar (50),
		tamanho6 varchar(50),
		quantidade6 int(5),
		estado varchar(50),
		dadopor varchar(50),
		aprovacao varchar(15),
		notas text
		);

	create table dispensa_fardamento(
		ndispensa int(10) primary key,
		npedido int(10),
		zona varchar(50),
		funcionario varchar(100),
		nif int(9),
		local_trabalho varchar(100),
		data varchar(10),
		tipo1 varchar (50),
		tamanho1 varchar(50),
		quantidade1 int(5),
		tipo2 varchar (50),
		tamanho2 varchar(50),
		quantidade2 int(5),
		tipo3 varchar (50),
		tamanho3 varchar(50),
		quantidade3 int(5),
		tipo4 varchar (50),
		tamanho4 varchar(50),
		quantidade4 int(5),
		tipo5 varchar (50),
		tamanho5 varchar(50),
		quantidade5 int(5),
		tipo6 varchar (50),
		tamanho6 varchar(50),
		quantidade6 int(5),
		estado varchar(50),
		disponibilizado varchar(50),
		aprovado_por varchar(50),
		total varchar(100),
		notas text
		);

	create table log(
		nlog int(10) primary key auto_increment,
		ip varchar(20),
		data varchar(10),
		hora varchar(10),
		try text
		);

	create table viaturas(
		marca varchar(20),
		modelo varchar(20),
		matricula varchar(8) primary key,
		kms int(10),
		revisao int(10),
		data_revisao varchar(10),
		data_inspecao varchar(10),
		estado varchar(20)
		);

	create table manutencao_viaturas(
		id int(10) primary key,
		data varchar(10),
		marca varchar(20),
		modelo varchar(20),
		matricula varchar(8),
		kms_data int(10),
		anticongelante varchar(20),
		oleo varchar(20),
		limpa_vidros varchar(20),
		pneus varchar(20),
		anomalias text,
		realizada_por varchar(30)
		);

	create table frases(
		id int(3) NOT NULL auto_increment primary key,
		frase text,
		autor varchar(50),
		data_utilizacao varchar(10)
		);

	create table stock_zona(
		zona varchar(50),
		tipo varchar (30),
		tamanho varchar(5),
		quantidade int(5)
		);

	create table clientes( //descontinuado
		zona varchar(50),
		designacao_comercial varchar(50),
		morada_servico varchar(100),
		nome_empresa varchar(50),
		morada_sede varchar(100),
		nif int(9),
		numero_contrato varchar(10) primary key,
		data_inicio varchar(10),
		data_fim varchar(10),
		renovavel varchar(3),
		duracao varchar(30),
		natureza varchar(50),
		horario text,
		n_elementos int(3),
		especialidade varchar(50),
		n_equipamentos int(3),
		tipo_equipamento varchar(50),
		marca varchar(50),
		modelo varchar(50),
		estado_contrato varchar(100),
		notas text,
		estado varchar(8)	
		);

	create table retoma_fardamento( --subir esta nova versao na base de dados
		nretoma int(10) primary key,
		ndispensa int(10),
		npedido int(10),
		zona varchar(50),
		funcionario varchar(100),
		nif int(9),
		local_trabalho varchar(100),
		data varchar(10),
		tipo1 varchar (50),
		tamanho1 varchar(50),
		quantidade1 int(5),
		destruido1 int(5),
		tipo2 varchar (50),
		tamanho2 varchar(50),
		quantidade2 int(5),
		destruido2 int(5),
		tipo3 varchar (50),
		tamanho3 varchar(50),
		quantidade3 int(5),
		destruido3 int(5),
		tipo4 varchar (50),
		tamanho4 varchar(50),
		quantidade4 int(5),
		destruido4 int(5),
		tipo5 varchar (50),
		tamanho5 varchar(50),
		quantidade5 int(5),
		destruido5 int(5),
		tipo6 varchar (50),
		tamanho6 varchar(50),
		quantidade6 int(5),
		destruido6 int(5),
		pagamento varchar(50),
		disponibilizado varchar(50),
		aprovado_por varchar(50),
		retomado_por varchar(50),
		total varchar(100),
		notas text
		);

	create table spy_gate(
		dia varchar(10),
		hora varchar(5),
		user varchar(20),
		log text
		);

	CREATE TABLE geral_log (
		id INT AUTO_INCREMENT PRIMARY KEY,
		dia VARCHAR(10),
		hora VARCHAR(5),
		user VARCHAR(20),
		log TEXT
		);

	create table log_funcionarios(
		id_log INT AUTO_INCREMENT PRIMARY KEY,
		n_processo int(9),
		dia VARCHAR(10),
		hora VARCHAR(5),
		user VARCHAR(20),
		log TEXT
		);

	CREATE TABLE posse_funcionario(
		nif int(9),
		tipo varchar(30),
		tamanho varchar(5),
		quantidade int(5)
		);

	CREATE TABLE log_clientes (
		id_log INT AUTO_INCREMENT PRIMARY KEY,
		n_contrato VARCHAR(10),
		dia varchar(10),
		hora varchar(5),
		user VARCHAR(20),
		log TEXT
		);

	CREATE TABLE registo_conta_corrente(
		ndispensa int(10),
		zona varchar(50),
		total varchar(10),
		estado varchar(15),
		notas text,
		data varchar(10)
		);

	CREATE TABLE log_conta_corrente(
		zona varchar(50),
		ndispensa int(10),
		data varchar(10),
		log text
		);

	CREATE TABLE registo_orcamentos(
		n_orcamento VARCHAR(15) AUTO_INCREMENT PRIMARY KEY,
		ano INT,
		data varchar(10),
		zona varchar(50),
		nome_cliente varchar(100),
		nif int(9),
		nome_servico varchar(100),
		morada_servico varchar(100),
		especialidades varchar(50),
		n_elementos int(5),
		info text,
		valor varchar(10),
		estado varchar(10),
		status varchar(9)
		);
	CREATE TABLE log_orcamentos (
		id_log INT AUTO_INCREMENT PRIMARY KEY,
		n_orcamento VARCHAR(10),
		dia varchar(10),
		hora varchar(5),
		user VARCHAR(20),
		log TEXT
		);

	CREATE TABLE registo_preco_dispensa( --subir na BD
		ndispensa int(10) PRIMARY KEY,
		preco_1 DECIMAL(4, 2),
		preco_2 DECIMAL(4, 2),
		preco_3 DECIMAL(4, 2),
		preco_4 DECIMAL(4, 2),
		preco_5 DECIMAL(4, 2),
		preco_6 DECIMAL(4, 2)
		);

	CREATE TABLE stalker(
		nif int(9),
		nome varchar(30),
		ultima_atualizacao varchar(10),
		facebook varchar(100),
		instagram varchar(100),
		tiktok varchar(100),
		linkdin varchar(100),
		twitter varchar(100),
		outro text
		);
		insert into zona values('1','Açores','Cátia','AC','Ativo'),
			('2','Lisboa Beto','Beto','LX','Ativo'),
			('3','Lisboa Faia','Jorge Faia','LF','Ativo'),
			('4','Arouca','Bruno Carrasco','AR','Ativo'),
			('5','SM Feira','Diamantino','SMF','Ativo'),
			('6','Porto 2','Filipe Mariano / Vitor Alves','P2','Ativo'),
			('7','H Oliveira Azemeis','Helder Freitas','HOL','Ativo'),
			('8','Penafiel','Vale do Sousa','VS','Ativo'),
			('9','Porto','João 25','P1','Ativo'),
			('10','Riba de Ave','João Matos','RA','Ativo'),
			('11','Coimbra','JP/Eduardo','C','Ativo'),
			('12','Porto 3','Krista','P3','Ativo'),
			('13','Setúbal','Moreira','S','Ativo'),
			('14','Gaia','Pedro Andrade','G','Ativo'),
			('15','Santo Tirso','Protek','ST','Ativo'),
			('16','Oliveira Azemeis','Rui Sá','ROL','Ativo'),
			('17','Famalicão','Vitor Fernandes','F','Ativo');

			insert into frases values('','É melhor falhar na originalidade do que ter sucesso na imitação.','Herman Melville','2010-10-10'),
				('','Tudo parece impossível até que seja feito.','Nelson Mandela','2010-10-10'),
				('','Se estás a trabalhar em algo excitante e do qual tu gostas mesmo muito, não precisas ser pressionado para ter mais resultados. A tua própria visão puxa-te para a frente.','Steve Jobs','2010-10-10'),
				('','A melhor forma de prever o futuro é criá-lo.','Peter Drucker','2010-10-10'),
				('','Se você pode sonhar, pode fazer.','Walt Disney','2010-10-10'),
				('','A coisa mais valiosa que podes fazer é cometer um erro; não conseguirás aprender seja o que for ao ser perfeito.','A. Osborne','2010-10-10'),
				('','O sucesso não é o que tu tens mas o que tu és.','Bo Bennet','2010-10-10'),
				('','Um vencedor nunca desiste e um desistente nunca ganha.','Vince Lombardi','2010-10-10'),
				('','Qualquer pessoa que não esteja a cometer erros é que não está a tentar o suficiente.','Wess Roberts','2010-10-10'),
				('','O sucesso não é a chave para a felicidade. A felicidade é a chave para o sucesso. Se amas o que fazes, serás bem sucedido.','A. Schweitzer','2010-10-10'),
				('','O maior prazer na vida consiste em fazer aquilo que os outros dizem que não se consegue fazer.','Walter Bagehot','2010-10-10'),
				('','Quanto mais você olha para trás, mais difícil será olhar para a frente.','Pierre Bonnard','2010-10-10'),
				('','A lógica vai levar-te de A até B. A imaginação vai levar-te a todos os lados.','Albert Einstein','2010-10-10'),
				('','Os dias prósperos não vêm por acaso, nascem de muita fadiga e persistência.','Henry Ford','2010-10-10'),
				('','O primeiro passo para conseguir algo é desejá-lo.','Madre Teresa de Calcutá','2010-10-10'),
				('','Sábio é aquele que conhece os limites da própria ignorância.','Sócrates','2010-10-10'),
				('','O que faz andar o barco não é a vela enfunada, mas o vento que não se vê...','Platão','2010-10-10'),
				('','O ignorante afirma, o sábio duvida, o sensato reflete.','Aristóteles','2010-10-10'),
				('','Não existem métodos fáceis para resolver problemas difíceis.','René Descartes','2010-10-10'),
				('','Geralmente aqueles que sabem pouco falam muito e aqueles que sabem muito falam pouco.','Jean-Jacques Rousseau','2010-10-10'),
				('','Ser o homem mais rico do cemitério não me interessa. Ir para a cama sabendo que fiz algo sensacional é o que me importa.','Steve Jobs','2010-10-10'),
				('','Se percebemos que a vida realmente tem um sentido, percebemos também que somos úteis uns aos outros. Ser humano é trabalhar por algo além de si mesmo.','Viktor Frankl','2010-10-10'),
				('','Há dois tipos de pessoas que vão lhe dizer que não há como fazer a diferença no mundo: aqueles que têm medo de tentar e aqueles que têm medo de testemunhar seu sucesso.','Ray Goforth','2010-10-10'),
				('','É melhor você tentar algo, fracassar e aprender com isso do que não fazer nada.','Mark Zuckerberg','2010-10-10'),
				('','É impossível para um homem aprender aquilo que ele acha que já sabe.','Epicuro','2010-10-10'),
				('','Quanto mais aumenta nosso conhecimento, mais evidente fica nossa ignorância.','John F. Kennedy','2010-10-10'),
				('','Aprender é a única coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende.','Leonardo da Vinci','2010-10-10'),
				('','Eu não falhei. Só descobri 10 mil caminhos que não eram o certo.','Thomas Edison','2010-10-10'),
				('','Quando vires um homem bom, tenta imitá-lo; quando vires um homem mau, examina-te a ti mesmo.','Confúcio','2010-10-10'),
				('','Pessimismo leva à fraqueza, otimismo ao poder.','William James','2010-10-10'),
				('','Tenho em mim todos os sonhos do mundo.','Fernando Pessoa','2010-10-10'),
				('','Os miseráveis não têm outro remédio a não ser a esperança.','William Shakespeare','2010-10-10'),
				('','Quem quer vencer um obstáculo deve armar-se da força do leão e da prudência da serpente.','Píndaro','2010-10-10');
				INSERT INTO frases VALUES
				('', 'A perseverança é o caminho do êxito.', 'Charles Chaplin', '2010-10-10'),
				('', 'O sucesso é a soma de pequenos esforços repetidos dia após dia.', 'Robert Collier', '2010-10-10'),
				('', 'O otimismo é a fé em ação. Nada se pode levar a cabo sem otimismo.', 'Helen Keller', '2010-10-10'),
				('', 'O futuro pertence àqueles que acreditam na beleza dos seus sonhos.', 'Eleanor Roosevelt', '2010-10-10'),
				('', 'A criatividade é a inteligência a divertir-se.', 'Albert Einstein', '2010-10-10'),
				('', 'O verdadeiro homem mede a sua força quando se defronta com o obstáculo.', 'Antoine de Saint-Exupéry', '2010-10-10'),
				('', 'A chave para o sucesso é a humildade aliada à perseverança.', 'Gustavo Santos', '2010-10-10'),
				('', 'O único lugar onde o sucesso vem antes do trabalho é no dicionário.', 'Vidal Sassoon', '2010-10-10'),
				('', 'Quando tudo parecer estar contra ti, lembra-te que os aviões descolam contra o vento, não a favor dele.', 'Henry Ford', '2010-10-10'),
				('', 'Não se preocupe com falhas, preocupe-se com as chances que perde quando nem sequer tenta.', 'Jack Canfield', '2010-10-10'),
				('', 'A vida é 10% o que acontece e 90% como você reage a isso.', 'Charles R. Swindoll', '2010-10-10'),
				('', 'O sucesso não é definitivo, o fracasso não é fatal: o que conta é a coragem para continuar.', 'Winston Churchill', '2010-10-10'),
				('', 'Acredite em si próprio e tudo será possível.', 'Albert Einstein', '2010-10-10'),
				('', 'Quando a vida coloca pedras no teu caminho, constrói algo bonito com elas.', 'Autor Desconhecido', '2010-10-10'),
				('', 'A única maneira de fazer um ótimo trabalho é amar o que fazes.', 'Steve Jobs', '2010-10-10'),
				('', 'A mente é tudo. Aquilo que pensas, tu te tornas.', 'Buda', '2010-10-10'),
				('', 'Se quiseres ser bem-sucedido, prepara-te para falhar.', 'Robert Kiyosaki', '2010-10-10'),
				('', 'Nada é particularmente difícil se o dividires em pequenas tarefas.', 'Henry Ford', '2010-10-10'),
				('', 'O sucesso é a soma de pequenos esforços repetidos dia após dia.', 'Robert Collier', '2010-10-10'),
				('', 'A vida é feita de escolhas. Escolhe bem e sê feliz.', 'Autor Desconhecido', '2010-10-10');
				https://ajuda.locaweb.com.br/wiki/resolver-caracteres-acentuados-no-mysql/
				ALTER DATABASE `base`CHARSET = Latin1 COLLATE = latin1_swedish_ci;
				https://stackoverflow.com/questions/44803547/autoindent-on-sublime-text

INSERT viaturas values ('Opel','Combo','43-VX-32','51480','54000','2025-02-01','2025-06-10','Ativo'),
('Renault','Clio','32-84-NX','324558','320000','2024-12-01','2025-03-10','Ativo')


				--------------- NOVAS TABELAS GROK VERSION--------

-- Tabela fardamento (estoque global)
CREATE TABLE IF NOT EXISTS fardamento (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (tipo, tamanho)
);

-- Tabela precario (preços dos itens)
CREATE TABLE IF NOT EXISTS precario (
    artigo VARCHAR(30),
    preco DECIMAL(6,2),
    PRIMARY KEY (artigo)
);

-- Tabela posse_funcionario (fardamento em posse de cada funcionário)
CREATE TABLE IF NOT EXISTS posse_funcionario (
    nif INT(9),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (nif, tipo, tamanho)
);

-- Tabela conta_corrente (dívidas e créditos por zona)
CREATE TABLE IF NOT EXISTS conta_corrente (
    zona VARCHAR(50),
    valor_divida DECIMAL(10,2) DEFAULT 0.00,
    valor_credito DECIMAL(10,2) DEFAULT 0.00,
    total_pago DECIMAL(10,2) DEFAULT 0.00,
    dispensas_pagas TEXT,
    PRIMARY KEY (zona)
);

-- Tabela registo_preco_dispensa (preços por dispensa)
CREATE TABLE IF NOT EXISTS registo_preco_dispensa (
    ndispensa INT(10),
    preco_1 DECIMAL(6,2),
    preco_2 DECIMAL(6,2),
    preco_3 DECIMAL(6,2),
    preco_4 DECIMAL(6,2),
    preco_5 DECIMAL(6,2),
    preco_6 DECIMAL(6,2),
    PRIMARY KEY (ndispensa)
);

-- Tabela dispensa_fardamento (histórico de dispensas, sem campos de itens)
CREATE TABLE dispensa_fardamento (
    ndispensa INT(10) PRIMARY KEY AUTO_INCREMENT,
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    estado VARCHAR(50),
    disponibilizado VARCHAR(50),
    total DECIMAL(10,2),
    notas TEXT
);

-- Nova tabela itens_dispensa (itens de cada dispensa)
CREATE TABLE IF NOT EXISTS itens_dispensa (
    ndispensa INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    preco DECIMAL(6,2),
    PRIMARY KEY (ndispensa, tipo, tamanho),
    FOREIGN KEY (ndispensa) REFERENCES dispensa_fardamento(ndispensa)
);

-- Tabela retoma_fardamento (histórico de retomas, sem campos de itens)
CREATE TABLE retoma_fardamento (
    nretoma INT(10) PRIMARY KEY AUTO_INCREMENT,
    ndispensa INT(10),
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    pagamento VARCHAR(50),
    disponibilizado VARCHAR(50),
    retomado_por VARCHAR(50),
    total DECIMAL(10,2),
    notas TEXT
);

-- Nova tabela itens_retoma (itens de cada retoma)
CREATE TABLE IF NOT EXISTS itens_retoma (
    nretoma INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    destruido INT(5),
    PRIMARY KEY (nretoma, tipo, tamanho),
    FOREIGN KEY (nretoma) REFERENCES retoma_fardamento(nretoma)
);

-- Tabela stock_zona (stock por zona, já renomeada)
CREATE TABLE IF NOT EXISTS stock_zona (
    zona VARCHAR(50),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (zona, tipo, tamanho)
);

-- Tabela registo_conta_corrente (transações financeiras)
CREATE TABLE IF NOT EXISTS registo_conta_corrente (
    ndispensa INT(10),
    zona VARCHAR(50),
    total DECIMAL(10,2),
    estado VARCHAR(15),
    notas TEXT,
    data DATE,
    PRIMARY KEY (ndispensa)
);

-- Tabela log_conta_corrente (log de movimentações financeiras)
CREATE TABLE IF NOT EXISTS log_conta_corrente (
    zona VARCHAR(50),
    ndispensa INT(10),
    data DATE,
    log TEXT
);

-- Tabela fardamento_tamanhos (mapeamento de tamanhos, já criada)
CREATE TABLE IF NOT EXISTS fardamento_tamanhos (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    ordem INT,
    PRIMARY KEY (tipo, tamanho)
);

-- Popular fardamento_tamanhos (com fitas incluídas)
INSERT 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);

CREATE TABLE precos_itens_dispensa (
    ndispensa INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    preco DECIMAL(6,2),
    PRIMARY KEY (ndispensa, tipo, tamanho),
    FOREIGN KEY (ndispensa) REFERENCES dispensa_fardamento(ndispensa) ON DELETE CASCADE
);

CREATE TABLE `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,
  `comprovativo` varchar(255) DEFAULT NULL,
  `registado_em` timestamp DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_ausencia`),
  KEY `nif_idx` (`nif`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

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

CREATE TABLE log_ausencias (
    id_log INT AUTO_INCREMENT PRIMARY KEY,
    nif VARCHAR(20) NOT NULL,
    user VARCHAR(50),
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    acao VARCHAR(50), -- Ex: "Inserir", "Remover", "Ajuste"
    tipo_ausencia VARCHAR(50),
    detalhes TEXT
);

-- =================================================================================
-- NOVAS TABELAS ATUALIZADAS PARA CLIENTES (COM EMAIL E CONTACTO)
-- =================================================================================

-- 1. Limpeza

-- 2. Tabela Principal (ALTERADA)
CREATE TABLE clientes (
    numero_contrato VARCHAR(50) PRIMARY KEY,
    nif VARCHAR(20),
    designacao_comercial VARCHAR(100),
    nome_empresa VARCHAR(100),
    
    -- NOVOS CAMPOS ADICIONADOS
    email VARCHAR(100),
    contacto VARCHAR(50),
    
    zona VARCHAR(50),
    morada_servico VARCHAR(255),
    morada_sede VARCHAR(255),
    data_inicio DATE,
    data_fim DATE,
    renovavel VARCHAR(3),
    duracao VARCHAR(50),
    estado_contrato VARCHAR(50),
    estado VARCHAR(20) DEFAULT 'Ativo',
    
    -- Operacional
    natureza VARCHAR(50),
    
    -- Rondas
    tem_rondas VARCHAR(3) DEFAULT 'Não',
    qtd_pontos_ronda INT DEFAULT 0,
    frequencia_rondas VARCHAR(100),
    
    notas TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. Serviços e Preços
CREATE TABLE clientes_servicos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    especialidade VARCHAR(50),
    quantidade INT DEFAULT 1,
    dias VARCHAR(100),
    horario VARCHAR(100),
    preco DECIMAL(10,2) DEFAULT 0.00,
    descricao_preco VARCHAR(100),
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 4. Tabela de Equipamentos
CREATE TABLE clientes_equipamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    tipo VARCHAR(50),
    quantidade INT DEFAULT 1,
    marca VARCHAR(100),
    modelo VARCHAR(100),
    num_serie VARCHAR(100),
    data_instalacao DATE,
    imei1 VARCHAR(50),
    imei2 VARCHAR(50),
    num_cartao VARCHAR(50),
    num_telemovel VARCHAR(50),
    descricao_extra TEXT,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 5. Pontos de Ronda
CREATE TABLE clientes_rondas_pontos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    ordem INT, 
    nome_ponto VARCHAR(100), 
    descricao_local VARCHAR(255),
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 6. Documentos
CREATE TABLE clientes_docs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    titulo VARCHAR(100),
    tipo_doc VARCHAR(50),
    nome_ficheiro VARCHAR(255),
    data_upload DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 7. Log Equipamentos
CREATE TABLE log_equipamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    data_hora DATETIME,
    user VARCHAR(50),
    acao TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 8. Adendas
CREATE TABLE clientes_adendas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_contrato VARCHAR(50),
    numero_adenda VARCHAR(50),
    data_adenda DATE,
    estado_adenda VARCHAR(50) DEFAULT 'Por Assinar', 
    descricao TEXT,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (numero_contrato) REFERENCES clientes(numero_contrato) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- =================================================================================
-- GESTÃO DE FROTA - VERSÃO 5 (STOCK REALISTA & LOGS DETALHADOS)
-- =================================================================================


-- 1. LIMPEZA

-- 2. VIATURAS (TODOS OS CAMPOS MANTIDOS)
CREATE TABLE viaturas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    matricula VARCHAR(8) UNIQUE NOT NULL,
    marca VARCHAR(50),
    modelo VARCHAR(50),
    ano INT(4),
    n_quadro VARCHAR(100), 
    cor VARCHAR(30),
    kms INT(10) DEFAULT 0,
    estado VARCHAR(20) DEFAULT 'Disponivel',
    
    -- Admin
    data_compra DATE,
    valor_compra DECIMAL(10,2),
    fornecedor_compra VARCHAR(100),
    
    -- Legal
    seguro_companhia VARCHAR(100),
    seguro_apolice VARCHAR(100),
    seguro_validade DATE,
    iuc_validade DATE,
    proxima_inspecao_data DATE,
    
    -- Mecânica
    proxima_revisao_kms INT(10),
    proxima_revisao_data DATE,

    -- GPS
    gps_tipo ENUM('Nenhum', 'Contrato', 'Proprio') DEFAULT 'Nenhum',
    gps_telemovel VARCHAR(20),
    gps_fidelizacao DATE,
    gps_marca VARCHAR(50),
    gps_modelo VARCHAR(50),
    gps_imei VARCHAR(50),
    gps_data_compra DATE,
    gps_garantia_ate DATE,
    
    notas TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. STOCK (COM TIPO DE CONTROLO)
CREATE TABLE stock_oficina (
    id INT AUTO_INCREMENT PRIMARY KEY,
    produto VARCHAR(100), 
    quantidade_atual DECIMAL(10,2),
    unidade VARCHAR(20), 
    tipo_controlo ENUM('Fluido', 'Unidade') DEFAULT 'Unidade', 
    quantidade_minima INT,
    localizacao VARCHAR(50),
    ultima_atualizacao DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT 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');

-- 4. VERIFICAÇÕES (COM LOG DE STOCK CONSUMIDO)
CREATE TABLE verificacoes_frota (
    id INT AUTO_INCREMENT PRIMARY KEY,
    viatura_id INT,
    user_username VARCHAR(50),
    responsavel_nome VARCHAR(100),
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    kms_atuais INT,
    
    -- Checklist Técnica
    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',
    
    -- Estado Limpeza
    limpeza_interior VARCHAR(20) DEFAULT 'OK',
    limpeza_exterior VARCHAR(20) DEFAULT 'OK',
    
    -- Danos
    novos_danos CHAR(3) DEFAULT 'Nao',
    descricao_danos TEXT,
    observacoes TEXT,
    
    -- Log Stock (Texto descrevendo o que acabou: "Acabou garrafa Limpa Vidros")
    stock_consumido_log TEXT,
    
    FOREIGN KEY (viatura_id) REFERENCES viaturas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 5. MANUTENÇÕES
CREATE TABLE manutencoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    viatura_id INT,
    user_username VARCHAR(50),
    responsavel_nome VARCHAR(100),
    tipo ENUM('Preventiva', 'Corretiva', 'Pneus', 'Inspecao', 'Sinistro', 'Legal') DEFAULT 'Preventiva',
    data_manutencao DATE,
    kms_na_manutencao INT,
    oficina_fornecedor VARCHAR(100),
    descricao_detalhada TEXT,
    pecas_aplicadas TEXT,
    custo_total DECIMAL(10,2),
    fatura_anexo VARCHAR(255),
    FOREIGN KEY (viatura_id) REFERENCES viaturas(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


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=utf8;

-- =================================================================
-- 1. LIMPEZA E CRIAÇÃO DE TABELAS DE ORÇAMENTOS
-- =================================================================

-- Apagar tabelas antigas de orçamentos se existirem (para recriar corretamente)

-- Tabela Principal de Orçamentos (Versão Final Corrigida)
CREATE TABLE orcamentos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    numero_orcamento VARCHAR(20), -- Ex: 1/2025
    sequencial INT,               -- Ex: 1 (Usado para gerar o próximo número)
    ano INT,                      -- Ex: 2025
    data_registo DATE,
    
    -- Dados Cliente
    cliente_nome VARCHAR(255),
    cliente_nif VARCHAR(20),
    cliente_responsavel VARCHAR(100),
    cliente_email VARCHAR(100),
    cliente_telefone VARCHAR(50),
    cliente_morada TEXT,
    
    -- Dados do Serviço
    zona VARCHAR(50),
    local_servico VARCHAR(255),
    tipo_servico VARCHAR(100), -- Vigilância, Portaria, etc.
    regime VARCHAR(100),       -- Horário
    n_elementos INT DEFAULT 0,
    
    -- Dados Financeiros
    valor DECIMAL(10,2) DEFAULT 0.00,
    unidade VARCHAR(50),       -- Ex: p/ Mês, p/ Hora, Global
    
    -- Gestão e Estado
    estado ENUM('Em Aberto', 'Adjudicado', 'Não Adjudicado', 'Sem Resposta', 'Cancelado') DEFAULT 'Em Aberto',
    data_validade DATE,
    motivo_rejeicao TEXT,
    obs_internas TEXT,
    criado_por VARCHAR(100),
    
    INDEX (ano),
    INDEX (estado)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Tabela de Logs de Orçamentos
CREATE TABLE log_orcamentos_geral (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_orcamento INT,
    data DATETIME DEFAULT CURRENT_TIMESTAMP,
    user VARCHAR(50),
    acao TEXT,
    FOREIGN KEY (id_orcamento) REFERENCES orcamentos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 1. Tabela para o Registo Geral de Entrada (O "Envelope" ou a Entrega)
CREATE TABLE correspondencia_entrada (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data_rececao DATE NOT NULL,
    hora_rececao TIME NOT NULL,
    remetente VARCHAR(255) NOT NULL,
    tipo_entrega VARCHAR(50), -- Ex: CTT Normal, CTT Registado, Em Mão, Estafeta
    n_tracking VARCHAR(100), -- Código de rastreio se houver
    recebido_por VARCHAR(100), -- Utilizador que registou
    observacoes TEXT,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 2. Tabela para os Itens dentro da Correspondência (Os vários contratos, faturas, etc.)
CREATE TABLE correspondencia_entrada_itens (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_entrada INT NOT NULL,
    tipo_documento VARCHAR(100), -- Ex: Contrato, Fatura, Carta, Notificação
    referencia VARCHAR(255), -- Ex: Nome do Funcionário, Nº Cliente, Nº Fatura
    descricao TEXT,
    FOREIGN KEY (id_entrada) REFERENCES correspondencia_entrada(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. Tabela para o Registo de Saídas (O que enviamos)
CREATE TABLE correspondencia_saida (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data_envio DATE NOT NULL,
    destinatario VARCHAR(255) NOT NULL,
    tipo_envio VARCHAR(50), -- Ex: CTT Normal, CTT Azul, CTT Registado, Email
    conteudo TEXT NOT NULL, -- O que foi enviado
    n_tracking VARCHAR(100),
    custo DECIMAL(10,2), -- Opcional: Custo do envio
    enviado_por VARCHAR(100),
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


SET FOREIGN_KEY_CHECKS = 0; -- Desativa verificação para permitir apagar sem erros

-- =========================================================
-- 1. LIMPEZA (APAGAR TABELAS ANTIGAS)
-- =========================================================

-- =========================================================
-- 2. TABELAS AUXILIARES (STOCK E PREÇOS)
-- =========================================================
CREATE TABLE fardamento (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (tipo, tamanho)
);

CREATE TABLE precario (
    artigo VARCHAR(30),
    preco DECIMAL(6,2),
    PRIMARY KEY (artigo)
);

CREATE TABLE posse_funcionario (
    nif INT(9),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (nif, tipo, tamanho)
);

CREATE TABLE stock_zona (
    zona VARCHAR(50),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    PRIMARY KEY (zona, tipo, tamanho)
);

CREATE TABLE fardamento_tamanhos (
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    ordem INT,
    PRIMARY KEY (tipo, tamanho)
);

-- =========================================================
-- 3. MÓDULO DISPENSA
-- =========================================================
-- Importante: Apagar primeiro os itens (filho) antes da dispensa (pai) para evitar erro #1451

CREATE TABLE dispensa_fardamento (
    ndispensa INT(10) PRIMARY KEY AUTO_INCREMENT,
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    estado VARCHAR(50), -- 'Falta Pagar', 'Pago', 'Gratis'
    disponibilizado VARCHAR(50),
    total DECIMAL(10,2) DEFAULT 0.00,
    notas TEXT
);

CREATE TABLE itens_dispensa (
    ndispensa INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    preco DECIMAL(6,2),
    PRIMARY KEY (ndispensa, tipo, tamanho),
    FOREIGN KEY (ndispensa) REFERENCES dispensa_fardamento(ndispensa) ON DELETE CASCADE
);

-- =========================================================
-- 4. MÓDULO RETOMA
-- =========================================================
CREATE TABLE retoma_fardamento (
    nretoma INT(10) PRIMARY KEY AUTO_INCREMENT,
    ndispensa INT(10), 
    zona VARCHAR(50),
    funcionario VARCHAR(100),
    nif INT(9),
    local_trabalho VARCHAR(100),
    data DATE,
    pagamento VARCHAR(50), -- 'Reembolsar', 'Sem devolução'
    disponibilizado VARCHAR(50),
    retomado_por VARCHAR(50),
    total DECIMAL(10,2) DEFAULT 0.00,
    notas TEXT
);

CREATE TABLE itens_retoma (
    nretoma INT(10),
    tipo VARCHAR(30),
    tamanho VARCHAR(5),
    quantidade INT(5),
    destruido INT(5),
    PRIMARY KEY (nretoma, tipo, tamanho),
    FOREIGN KEY (nretoma) REFERENCES retoma_fardamento(nretoma) ON DELETE CASCADE
);

-- =========================================================
-- 5. CONTABILIDADE (CONTA CORRENTE) - CORRIGIDA
-- =========================================================
CREATE TABLE conta_corrente (
    zona VARCHAR(50),
    valor_divida DECIMAL(10,2) DEFAULT 0.00,
    valor_credito DECIMAL(10,2) DEFAULT 0.00,
    total_pago DECIMAL(10,2) DEFAULT 0.00,
    dispensas_pagas TEXT,
    PRIMARY KEY (zona) -- O SEGREDO: Chave Primária impede duplicados
);

CREATE TABLE log_conta_corrente (
    id_log INT AUTO_INCREMENT PRIMARY KEY,
    zona VARCHAR(50),
    ndispensa INT(10),
    nretoma INT(10),
    data DATE,
    log TEXT
);

SET FOREIGN_KEY_CHECKS = 1; -- Reativa verificação



-- Modulo escalas
-- Limpeza de tabelas para garantir compatibilidade (ordem reversa das FKs)

-- 1. Postos de Trabalho (Service Locations)
CREATE TABLE escalas_postos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    cliente_id VARCHAR(50) DEFAULT NULL, -- numero_contrato dos clientes
    ativo TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. Staff Fixo (Persistência entre meses)
CREATE TABLE escalas_postos_staff (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    nif VARCHAR(9) NOT NULL,
    nome_funcionario VARCHAR(255),
    valido_desde DATE NOT NULL, -- Primeiro dia do mês em que entrou
    valido_ate DATE DEFAULT NULL,  -- Último dia do mês em que saiu (NULL = Ativo)
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE,
    INDEX (posto_id, nif)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Templates de Turnos (Definições Atuais)
CREATE TABLE escalas_turnos_config (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    nome VARCHAR(50) NOT NULL,
    hora_entrada TIME NOT NULL,
    hora_saida TIME NOT NULL,
    ativo TINYINT(1) DEFAULT 1,
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. Cabeçalho das Escalas
CREATE TABLE escalas_cabecalho (
    id INT AUTO_INCREMENT PRIMARY KEY,
    posto_id INT NOT NULL,
    mes INT NOT NULL,
    ano INT NOT NULL,
    estado ENUM('Rascunho', 'Publicada', 'Fechada') DEFAULT 'Rascunho',
    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,
    criado_por VARCHAR(100),
    FOREIGN KEY (posto_id) REFERENCES escalas_postos(id) ON DELETE CASCADE,
    UNIQUE KEY unique_escala (posto_id, mes, ano)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. Dados Históricos (Congelamento de horários)
CREATE TABLE escalas_dados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    escala_id INT NOT NULL,
    dia INT NOT NULL,
    nif_funcionario VARCHAR(9) NOT NULL,
    nome_funcionario VARCHAR(255),
    turno_nome VARCHAR(50), -- Nome do turno na altura
    hora_entrada TIME,      -- Hora na altura (não muda se o template mudar)
    hora_saida TIME,        -- Hora na altura
    FOREIGN KEY (escala_id) REFERENCES escalas_cabecalho(id) ON DELETE CASCADE,
    INDEX (nif_funcionario, dia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. Logs de Alterações
CREATE TABLE escalas_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    escala_id INT,
    utilizador VARCHAR(100),
    acao VARCHAR(255),
    detalhes TEXT,
    data_hora DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (escala_id) REFERENCES escalas_cabecalho(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- IMPORTANTE, CORRIGE ERROS NA TABELA DE RETOMAS
-- ===================================================================
-- CORREÇÕES CRÍTICAS - MÓDULO DE FARDAMENTO
-- Executar ANTES de usar os ficheiros PHP corrigidos
-- ===================================================================

-- 1. ADICIONAR COLUNA PREÇO EM ITENS_RETOMA
-- Permite rastrear o valor dos itens retomados para auditorias
ALTER TABLE itens_retoma 
ADD COLUMN preco DECIMAL(6,2) DEFAULT 0.00 
AFTER destruido;

-- 2. CRIAR ÍNDICES PARA OTIMIZAR CONSULTAS
-- Melhora performance nas queries de saldo e histórico

-- Índice para buscar dispensas por NIF + Zona
CREATE INDEX idx_dispensa_nif_zona 
ON dispensa_fardamento(nif, zona, data);

-- Índice para buscar retomas por NIF + Zona
CREATE INDEX idx_retoma_nif_zona 
ON retoma_fardamento(nif, zona, data);

-- Índice para itens de dispensa (JOIN frequente)
CREATE INDEX idx_itens_dispensa_lookup 
ON itens_dispensa(tipo, tamanho);

-- Índice para itens de retoma (JOIN frequente)
CREATE INDEX idx_itens_retoma_lookup 
ON itens_retoma(tipo, tamanho);

-- 3. GARANTIR CHARSET UTF8 EM TODAS AS TABELAS RELEVANTES
-- Nota: Usando utf8 em vez de utf8mb4 para compatibilidade com PHP 7.3
ALTER TABLE dispensa_fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE itens_dispensa CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE retoma_fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE itens_retoma CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE conta_corrente CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE fardamento CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE precario CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE posse_funcionario CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE stock_zona CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 4. SCRIPT DE VALIDAÇÃO DE INTEGRIDADE
-- Verifica se há dispensas sem itens (possível corrupção de dados)
SELECT 
    'Dispensas sem itens' as problema,
    COUNT(*) as total
FROM dispensa_fardamento df
WHERE NOT EXISTS (
    SELECT 1 FROM itens_dispensa id WHERE id.ndispensa = df.ndispensa
);

-- Verifica se há retomas sem itens
SELECT 
    'Retomas sem itens' as problema,
    COUNT(*) as total
FROM retoma_fardamento rf
WHERE NOT EXISTS (
    SELECT 1 FROM itens_retoma ir WHERE ir.nretoma = rf.nretoma
);

-- Verifica saldos negativos na posse (indicador de erro de lógica)
SELECT 
    'Possíveis saldos negativos' as problema,
    df.nif,
    df.zona,
    id.tipo,
    id.tamanho,
    SUM(id.quantidade) as dispensado,
    COALESCE(SUM(ir.quantidade), 0) as retomado,
    SUM(id.quantidade) - COALESCE(SUM(ir.quantidade), 0) as saldo
FROM itens_dispensa id
JOIN dispensa_fardamento df ON id.ndispensa = df.ndispensa
LEFT JOIN itens_retoma ir ON ir.tipo = id.tipo 
    AND ir.tamanho = id.tamanho
    AND ir.nretoma IN (
        SELECT rf.nretoma 
        FROM retoma_fardamento rf 
        WHERE rf.nif = df.nif AND rf.zona = df.zona
    )
GROUP BY df.nif, df.zona, id.tipo, id.tamanho
HAVING saldo < 0;

-- ===================================================================
-- FIM DAS CORREÇÕES CRÍTICAS
-- ===================================================================

-- =========================================================
-- TABELA: DECLARAÇÕES DE FARDAMENTO POR ASSINAR
-- =========================================================
CREATE TABLE IF NOT EXISTS declaracoes_pendentes (
    id INT(10) PRIMARY KEY AUTO_INCREMENT,
    ndispensa INT(10) NOT NULL,
    nif INT(9) NOT NULL,
    funcionario VARCHAR(100),
    zona VARCHAR(50),
    data_dispensa DATE,
    data_registo DATETIME DEFAULT CURRENT_TIMESTAMP,
    estado ENUM('Falta assinar', 'Assinado') DEFAULT 'Falta assinar',
    data_assinatura DATETIME NULL,
    assinatura_recolhida_por VARCHAR(50) NULL,
    notas TEXT NULL,
    FOREIGN KEY (ndispensa) REFERENCES dispensa_fardamento(ndispensa) ON DELETE CASCADE,
    INDEX idx_estado (estado),
    INDEX idx_nif (nif),
    INDEX idx_zona (zona)
);