-- =====================================================================
-- PLATAFORMA DE GESTAO DE PEDIDOS DE ORCAMENTOS
-- Base de Dados MySQL - Schema completo
-- =====================================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

CREATE DATABASE IF NOT EXISTS orcamentos_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE orcamentos_db;

-- ---------------------------------------------------------------------
-- ESTADO (genérico: Ativo / Desativo) - usado por várias tabelas
-- ---------------------------------------------------------------------
CREATE TABLE estado (
    id_estado       INT AUTO_INCREMENT PRIMARY KEY,
    des_estado      VARCHAR(50) NOT NULL
) ENGINE=InnoDB;

INSERT INTO estado (des_estado) VALUES ('Ativo'), ('Desativo');

-- ---------------------------------------------------------------------
-- CONTACTO
-- ---------------------------------------------------------------------
CREATE TABLE contacto (
    id_contacto     INT AUTO_INCREMENT PRIMARY KEY,
    morada          VARCHAR(255),
    cod_postal      VARCHAR(20),
    local           VARCHAR(100),
    contacto_movel  VARCHAR(30),
    contacto_fixo   VARCHAR(30),
    contacto_email  VARCHAR(150)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- PERFIL (perfis de acesso / permissões)
-- ---------------------------------------------------------------------
CREATE TABLE perfil (
    id_perfil                   INT AUTO_INCREMENT PRIMARY KEY,
    des_perfil                  VARCHAR(100) NOT NULL,
    administracao                TINYINT(1) DEFAULT 0,
    visualiza_orcamentos          TINYINT(1) DEFAULT 0,
    cria_orcamentos               TINYINT(1) DEFAULT 0,
    edita_orcamentos              TINYINT(1) DEFAULT 0,
    elimina_orcamentos            TINYINT(1) DEFAULT 0,
    aprova_orcamentos             TINYINT(1) DEFAULT 0,
    visualiza_todos_orcamentos    TINYINT(1) DEFAULT 0,
    edita_todos_orcamentos        TINYINT(1) DEFAULT 0,
    elimina_todos_orcamentos      TINYINT(1) DEFAULT 0,
    consulta_docs_orcamentos      TINYINT(1) DEFAULT 0,
    edita_docs_orcamentos         TINYINT(1) DEFAULT 0,
    elimina_docs_orcamentos       TINYINT(1) DEFAULT 0,
    upload_docs_orcamentos        TINYINT(1) DEFAULT 0,
    atribui_fornecedores          TINYINT(1) DEFAULT 0,
    envia_pedidos_fornecedor      TINYINT(1) DEFAULT 0,
    id_estado                    INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- TIPO DE ENTIDADE (Entidade Gestora / Condomínio / Fornecedor)
-- ---------------------------------------------------------------------
CREATE TABLE tipo_entidade (
    id_tipo_entidade    INT AUTO_INCREMENT PRIMARY KEY,
    des_tipo_entidade   VARCHAR(100) NOT NULL,
    id_utilizador_reg   INT NULL,
    dataregisto         DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_estado           INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

INSERT INTO tipo_entidade (des_tipo_entidade) VALUES
('Entidade Gestora'), ('Condominio'), ('Fornecedor');

-- ---------------------------------------------------------------------
-- ENTIDADES
-- ---------------------------------------------------------------------
CREATE TABLE entidade (
    id_entidade         INT AUTO_INCREMENT PRIMARY KEY,
    id_externo          VARCHAR(50) NULL,
    nome_entidade       VARCHAR(150) NOT NULL,
    entidade_principal  TINYINT(1) DEFAULT 0,
    nif                 VARCHAR(20) NOT NULL,
    dataregisto         DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_estado           INT NOT NULL DEFAULT 1,
    id_contacto         INT NULL,
    id_utilizador_reg   INT NULL,
    id_tipo_entidade    INT NOT NULL,
    callback_url_state    VARCHAR(500) NULL,
    callback_url_orcamento VARCHAR(500) NULL,
    observacoes         TEXT NULL,
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado),
    FOREIGN KEY (id_contacto) REFERENCES contacto(id_contacto),
    FOREIGN KEY (id_tipo_entidade) REFERENCES tipo_entidade(id_tipo_entidade),
    INDEX (nif), INDEX (id_externo)
) ENGINE=InnoDB;

-- Entidade Gestora - liga uma entidade ao papel de "gestora" (id_externo do sistema externo)
CREATE TABLE entidade_gestora (
    id_entidade_gestora INT AUTO_INCREMENT PRIMARY KEY,
    id_entidade         INT NOT NULL,
    id_externo          VARCHAR(50) NULL,
    FOREIGN KEY (id_entidade) REFERENCES entidade(id_entidade)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- UTILIZADORES
-- ---------------------------------------------------------------------
CREATE TABLE utilizador (
    id_utilizador       INT AUTO_INCREMENT PRIMARY KEY,
    nome_utilizador     VARCHAR(150) NOT NULL,
    login               VARCHAR(100) NOT NULL UNIQUE,
    password_hash       VARCHAR(255) NOT NULL,
    dataregisto         DATETIME DEFAULT CURRENT_TIMESTAMP,
    dataultimologin     DATETIME NULL,
    id_perfil           INT NOT NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    id_entidade         INT NULL,
    id_contacto         INT NULL,
    FOREIGN KEY (id_perfil) REFERENCES perfil(id_perfil),
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado),
    FOREIGN KEY (id_entidade) REFERENCES entidade(id_entidade),
    FOREIGN KEY (id_contacto) REFERENCES contacto(id_contacto)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- CATEGORIAS (para fornecedores)
-- ---------------------------------------------------------------------
CREATE TABLE categoria (
    id_categoria        INT AUTO_INCREMENT PRIMARY KEY,
    desc_categoria      VARCHAR(150) NOT NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    dataregisto         DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_utilizador_reg   INT NULL,
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

INSERT INTO categoria (desc_categoria) VALUES
('Projeto'),('Preparação da Obra'),('Terraplanagens'),('Estruturas'),('Alvenarias'),
('Coberturas'),('Fachadas'),('Instalações Elétricas'),('Canalização'),('AVAC'),
('Gás'),('Energias Renováveis'),('Carpintaria'),('Serralharia'),('Caixilharia'),
('Revestimentos'),('Pavimentos'),('Pinturas'),('Impermeabilizações'),('Isolamentos'),
('Espaços Exteriores'),('Piscinas'),('Reabilitação'),('Demolições'),('Limpeza de Obra'),
('Fiscalização'),('Gestão de Obra');

-- ---------------------------------------------------------------------
-- FORNECEDORES
-- ---------------------------------------------------------------------
CREATE TABLE fornecedor (
    id_fornecedor       INT AUTO_INCREMENT PRIMARY KEY,
    id_entidade         INT NOT NULL,
    id_utilizador_reg   INT NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    dataregisto         DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (id_entidade) REFERENCES entidade(id_entidade),
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

CREATE TABLE fornecedor_categoria (
    id_fornecedor   INT NOT NULL,
    id_categoria    INT NOT NULL,
    PRIMARY KEY (id_fornecedor, id_categoria),
    FOREIGN KEY (id_fornecedor) REFERENCES fornecedor(id_fornecedor),
    FOREIGN KEY (id_categoria) REFERENCES categoria(id_categoria)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- TIPOS DE SERVICO (1 Orçamento / 3 Orçamentos / 3 Orçamentos 5 dias / Relatório Patologias)
-- ---------------------------------------------------------------------
CREATE TABLE tipo_servico (
    id_tipo_servico     INT AUTO_INCREMENT PRIMARY KEY,
    nome_servico        VARCHAR(150) NOT NULL,
    valor               DECIMAL(10,2) NOT NULL DEFAULT 0,
    dias_validade       INT NULL,
    html_descricao      TEXT NULL,
    data_validade       DATE NULL,
    id_utilizador_reg   INT NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

INSERT INTO tipo_servico (nome_servico, valor, dias_validade, html_descricao) VALUES
('1 Orçamento', 49.00, 15, 'Receção de 1 orçamento de fornecedor.'),
('3 Orçamentos', 99.00, 15, 'Receção de 3 orçamentos de fornecedores distintos.'),
('3 Orçamentos - resposta máx. 5 dias', 149.00, 5, 'Receção de 3 orçamentos com resposta garantida em 5 dias.'),
('Relatório de Patologias', 199.00, 30, 'Relatório técnico de patologias do imóvel.');

-- ---------------------------------------------------------------------
-- TIPOS DE NOTIFICACAO
-- ---------------------------------------------------------------------
CREATE TABLE tipo_notificacao (
    id_tipo_notificacao INT AUTO_INCREMENT PRIMARY KEY,
    desc_tipo_notificacao VARCHAR(100) NOT NULL,
    email               TINYINT(1) DEFAULT 0,
    plataforma          TINYINT(1) DEFAULT 0,
    api                 TINYINT(1) DEFAULT 0
) ENGINE=InnoDB;

INSERT INTO tipo_notificacao (desc_tipo_notificacao, email, plataforma, api) VALUES
('Email', 1, 0, 0),
('Plataforma', 0, 1, 0),
('Ambos (Email/Plataforma)', 1, 1, 0),
('API', 0, 0, 1);

-- ---------------------------------------------------------------------
-- ESTADOS DE PAGAMENTO
-- ---------------------------------------------------------------------
CREATE TABLE estado_pagamento (
    id_estado_pagamento     INT AUTO_INCREMENT PRIMARY KEY,
    desc_estado_pagamento   VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

INSERT INTO estado_pagamento (desc_estado_pagamento) VALUES
('Pendente'), ('Pago'), ('Cancelado');

-- ---------------------------------------------------------------------
-- ESTADOS DE PEDIDO (workflow completo, com transição e notificações)
-- ---------------------------------------------------------------------
CREATE TABLE estado_pedido (
    id_estado_pedido            INT AUTO_INCREMENT PRIMARY KEY,
    desc_estado_pedido          VARCHAR(100) NOT NULL,
    ordem                       INT NOT NULL,
    proximo_id_estado_pedido    INT NULL,
    assunto                     VARCHAR(255) NULL,
    notifica_entidade           TINYINT(1) DEFAULT 0,
    html_entidade               TEXT NULL,
    notifica_novoutilizador     TINYINT(1) DEFAULT 0,
    html_novoutilizador         TEXT NULL,
    notifica_fornecedores       TINYINT(1) DEFAULT 0,
    html_fornecedor             TEXT NULL,
    id_tipo_notificacao         INT NULL,
    FOREIGN KEY (id_tipo_notificacao) REFERENCES tipo_notificacao(id_tipo_notificacao)
) ENGINE=InnoDB;

INSERT INTO estado_pedido
    (desc_estado_pedido, ordem, assunto, notifica_entidade, html_entidade,
     notifica_novoutilizador, html_novoutilizador, notifica_fornecedores, html_fornecedor, id_tipo_notificacao)
VALUES
('Submetido', 10, 'O seu pedido de orçamento foi submetido com sucesso', 1,
 '<p>O seu pedido foi submetido com sucesso. Aceda ao link para concluir o seu pedido, escolhendo o tipo de serviço pretendido.</p>',
 0, NULL, 0, NULL, 1),
('Aguardar Pagamento', 20, 'Aguardamos a confirmação do pagamento', 1,
 '<p>Recebemos o comprovativo de transferência bancária. O seu pedido aguarda validação de pagamento.</p>',
 0, NULL, 0, NULL, 1),
('Recebido', 30, 'Pagamento confirmado - pedido em fila', 1,
 '<p>O pagamento foi confirmado. O seu pedido será atribuído a um gestor em breve.</p>',
 0, NULL, 0, NULL, 1),
('Em Analise', 40, NULL, 0, NULL, 0, NULL, 0, NULL, NULL),
('Atribuição de Fornecedor', 50, NULL, 0, NULL, 0, NULL, 0, NULL, NULL),
('Analisar Orçamentos', 60, NULL, 0, NULL, 0, NULL, 1,
 '<p>Foi convidado a apresentar um orçamento. Consulte os anexos em anexo.</p>', 3),
('Aguardar Aprovação', 70, NULL, 0, NULL, 0, NULL, 0, NULL, NULL),
('Orçamentos Enviados', 80, 'Os seus orçamentos já estão disponíveis', 1,
 '<p>Os orçamentos solicitados foram aprovados e enviados para o seu email/plataforma.</p>',
 0, NULL, 0, NULL, 1),
('Pré-Adjudicado', 90, NULL, 0, NULL, 0, NULL, 0, NULL, NULL);

-- ---------------------------------------------------------------------
-- TIPO DE DOCUMENTO / ESTADO DO DOCUMENTO
-- ---------------------------------------------------------------------
CREATE TABLE tipo_documento (
    id_tipo_doc     INT AUTO_INCREMENT PRIMARY KEY,
    des_tipo_doc    VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

INSERT INTO tipo_documento (des_tipo_doc) VALUES
('Anexos Pedidos'), ('Orçamento'), ('Comprovativo Pagamento');

CREATE TABLE estado_documento (
    id_doc_estado   INT AUTO_INCREMENT PRIMARY KEY,
    des_doc_estado  VARCHAR(50) NOT NULL
) ENGINE=InnoDB;

INSERT INTO estado_documento (des_doc_estado) VALUES ('Ativo'), ('Eliminado'), ('Editado');

-- ---------------------------------------------------------------------
-- PEDIDO (tabela central do fluxo)
-- ---------------------------------------------------------------------
CREATE TABLE pedido (
    id_pedido_orc           INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_externo       VARCHAR(100) NULL,
    id_entidade_gestora     INT NOT NULL,
    id_entidade             INT NOT NULL,
    datapedido              DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_estado_pedido        INT NOT NULL DEFAULT 1,
    id_tipo_servico         INT NULL,
    data_validade           DATE NULL,
    id_utilizador_atribuido INT NULL,
    url_token               VARCHAR(128) NOT NULL UNIQUE,
    urlcallback_state       VARCHAR(500) NULL,
    urlcallback_orcamento   VARCHAR(500) NULL,
    observacoes             TEXT NULL,
    id_utilizador_reg       INT NULL,
    dataregisto             DATETIME DEFAULT CURRENT_TIMESTAMP,
    dataatualizacao         DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
    id_estado               INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_entidade_gestora) REFERENCES entidade_gestora(id_entidade_gestora),
    FOREIGN KEY (id_entidade) REFERENCES entidade(id_entidade),
    FOREIGN KEY (id_estado_pedido) REFERENCES estado_pedido(id_estado_pedido),
    FOREIGN KEY (id_tipo_servico) REFERENCES tipo_servico(id_tipo_servico),
    FOREIGN KEY (id_utilizador_atribuido) REFERENCES utilizador(id_utilizador),
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado),
    INDEX (url_token), INDEX (id_estado_pedido)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- PEDIDO ATRIBUIDO (histórico de atribuição de utilizador por estado)
-- ---------------------------------------------------------------------
CREATE TABLE pedido_atribuido (
    id                          INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc               INT NOT NULL,
    id_estado_pedido            INT NOT NULL,
    datainicio                  DATETIME DEFAULT CURRENT_TIMESTAMP,
    datafim                     DATETIME NULL,
    id_utilizador_atribuido     INT NOT NULL,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_estado_pedido) REFERENCES estado_pedido(id_estado_pedido),
    FOREIGN KEY (id_utilizador_atribuido) REFERENCES utilizador(id_utilizador)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- PEDIDO FORNECEDOR (pedido enviado a um fornecedor específico)
-- ---------------------------------------------------------------------
CREATE TABLE pedido_fornecedor (
    id_pedido_fornecedor    INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc           INT NOT NULL,
    id_fornecedor           INT NOT NULL,
    id_utilizador_reg       INT NULL,
    datapedido              DATETIME DEFAULT CURRENT_TIMESTAMP,
    datalimiteresposta      DATE NULL,
    dataresposta            DATETIME NULL,
    obs_pedido_fornecedor   TEXT NULL,
    id_estado               INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_fornecedor) REFERENCES fornecedor(id_fornecedor),
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- ORCAMENTO (orçamento apresentado por um fornecedor a um pedido_fornecedor)
-- ---------------------------------------------------------------------
CREATE TABLE orcamento (
    id_orcamento            INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_fornecedor    INT NOT NULL,
    valor                   DECIMAL(12,2) NULL,
    observacoes             TEXT NULL,
    dataregisto             DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_utilizador_reg       INT NULL,
    id_estado               INT NOT NULL DEFAULT 1,
    FOREIGN KEY (id_pedido_fornecedor) REFERENCES pedido_fornecedor(id_pedido_fornecedor),
    FOREIGN KEY (id_estado) REFERENCES estado(id_estado)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- ORCAMENTO APROVACAO
-- ---------------------------------------------------------------------
CREATE TABLE orcamento_aprovacao (
    id_aprovacao        INT AUTO_INCREMENT PRIMARY KEY,
    id_orcamento        INT NOT NULL,
    id_utilizador       INT NOT NULL,
    data_pedido         DATETIME DEFAULT CURRENT_TIMESTAMP,
    data_aprovacao      DATETIME NULL,
    id_estado           INT NOT NULL DEFAULT 1,
    observacoes         TEXT NULL,
    FOREIGN KEY (id_orcamento) REFERENCES orcamento(id_orcamento),
    FOREIGN KEY (id_utilizador) REFERENCES utilizador(id_utilizador)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- DOCUMENTOS (anexos do pedido, orçamentos de fornecedores, comprovativos)
-- ---------------------------------------------------------------------
CREATE TABLE documento (
    id_documento         INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc        INT NOT NULL,
    id_orcamento         INT NULL,
    id_pedido_fornecedor INT NULL,
    nome_documento       VARCHAR(200) NOT NULL,
    caminho_ficheiro     VARCHAR(500) NOT NULL,
    extensao             VARCHAR(10) NOT NULL,
    dataregisto          DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_utilizador_reg    INT NULL,
    id_doc_estado        INT NOT NULL DEFAULT 1,
    id_tipo_doc          INT NOT NULL,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_orcamento) REFERENCES orcamento(id_orcamento),
    FOREIGN KEY (id_pedido_fornecedor) REFERENCES pedido_fornecedor(id_pedido_fornecedor),
    FOREIGN KEY (id_doc_estado) REFERENCES estado_documento(id_doc_estado),
    FOREIGN KEY (id_tipo_doc) REFERENCES tipo_documento(id_tipo_doc)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- PAGAMENTO
-- ---------------------------------------------------------------------
CREATE TABLE pagamento (
    id_pagamento            INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc           INT NOT NULL,
    id_estado_pagamento     INT NOT NULL DEFAULT 1,
    id_ref_pagamento        VARCHAR(100) NULL,
    metodo                  ENUM('lusopay','transferencia') NOT NULL DEFAULT 'lusopay',
    dataregisto             DATETIME DEFAULT CURRENT_TIMESTAMP,
    data_pagamento          DATETIME NULL,
    valor                   DECIMAL(10,2) NOT NULL,
    comprovativo_ficheiro   VARCHAR(500) NULL,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_estado_pagamento) REFERENCES estado_pagamento(id_estado_pagamento)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- NOTAS DO PEDIDO
-- ---------------------------------------------------------------------
CREATE TABLE nota_pedido (
    id                  INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc       INT NOT NULL,
    id_estado_pedido    INT NOT NULL,
    notas               TEXT NOT NULL,
    datanotas           DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_utilizador_reg   INT NOT NULL,
    privada             TINYINT(1) DEFAULT 0,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_estado_pedido) REFERENCES estado_pedido(id_estado_pedido),
    FOREIGN KEY (id_utilizador_reg) REFERENCES utilizador(id_utilizador)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- NOTIFICACAO (registo de notificações enviadas)
-- ---------------------------------------------------------------------
CREATE TABLE notificacao (
    id_notificacao          INT AUTO_INCREMENT PRIMARY KEY,
    id_pedido_orc           INT NOT NULL,
    id_estado_pedido        INT NOT NULL,
    datanotificacao         DATETIME DEFAULT CURRENT_TIMESTAMP,
    id_tipo_notificacao     INT NOT NULL,
    id_utilizador_atribuido INT NULL,
    id_entidade_gestora     INT NULL,
    id_entidade             INT NULL,
    mensagem                TEXT NULL,
    assunto                 VARCHAR(255) NULL,
    lida                    TINYINT(1) DEFAULT 0,
    datalida                DATETIME NULL,
    FOREIGN KEY (id_pedido_orc) REFERENCES pedido(id_pedido_orc),
    FOREIGN KEY (id_estado_pedido) REFERENCES estado_pedido(id_estado_pedido),
    FOREIGN KEY (id_tipo_notificacao) REFERENCES tipo_notificacao(id_tipo_notificacao)
) ENGINE=InnoDB;

-- ---------------------------------------------------------------------
-- AUDITORIA (log genérico de alterações)
-- ---------------------------------------------------------------------
CREATE TABLE auditoria (
    id_auditoria    INT AUTO_INCREMENT PRIMARY KEY,
    tabela          VARCHAR(100) NOT NULL,
    id_registo      INT NOT NULL,
    operacao        ENUM('INSERT','UPDATE','DELETE') NOT NULL,
    id_utilizador   INT NULL,
    data            DATETIME DEFAULT CURRENT_TIMESTAMP,
    ip              VARCHAR(45) NULL,
    campo           VARCHAR(100) NULL,
    valor_anterior  TEXT NULL,
    valor_novo      TEXT NULL
) ENGINE=InnoDB;

-- =====================================================================
-- Dados iniciais: perfil Administrador e utilizador admin (senha: admin123)
-- =====================================================================
INSERT INTO perfil (des_perfil, administracao, visualiza_orcamentos, cria_orcamentos, edita_orcamentos,
    elimina_orcamentos, aprova_orcamentos, visualiza_todos_orcamentos, edita_todos_orcamentos,
    elimina_todos_orcamentos, consulta_docs_orcamentos, edita_docs_orcamentos, elimina_docs_orcamentos,
    upload_docs_orcamentos, atribui_fornecedores, envia_pedidos_fornecedor, id_estado)
VALUES ('Administrador', 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1);

INSERT INTO perfil (des_perfil, visualiza_orcamentos, cria_orcamentos, edita_orcamentos, aprova_orcamentos,
    consulta_docs_orcamentos, upload_docs_orcamentos, atribui_fornecedores, envia_pedidos_fornecedor, id_estado)
VALUES ('Gestor de Orçamentos', 1,1,1,1,1,1,1,1, 1);

INSERT INTO perfil (des_perfil, visualiza_orcamentos, consulta_docs_orcamentos, id_estado)
VALUES ('Consulta', 1,1, 1);

-- password_hash de 'admin123' gerado por bcrypt (compatível com password_verify() do PHP)
INSERT INTO utilizador (nome_utilizador, login, password_hash, id_perfil, id_estado)
VALUES ('Administrador', 'admin', '$2b$10$gOuPgio300q8NdVfpJJxE.PmixodFdW8WiGq3GrWQWzDWR76GtRvK', 1, 1);
-- NOTA: o hash acima corresponde à password "admin123". Deve ser alterada no primeiro acesso.

SET FOREIGN_KEY_CHECKS = 1;
