-- Criar banco de dados (ajuste o nome conforme necessário)
CREATE DATABASE IF NOT EXISTS plataforma_precos;
USE plataforma_precos;

-- Tabela users
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_completo VARCHAR(150) NOT NULL,
    nome_utilizador VARCHAR(50) NOT NULL UNIQUE,
    palavra_passe VARCHAR(255) NOT NULL,
    nivel_permissao ENUM('admin', 'operador', 'utilizador') NOT NULL,
    data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    foto_perfil VARCHAR(255)
);

CREATE INDEX idx_users_username ON users(nome_utilizador);

-- Tabela products
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_produto VARCHAR(150) NOT NULL,
    marca VARCHAR(100),
    categoria VARCHAR(100),
    descricao TEXT,
    foto_produto VARCHAR(255),
    codigo_barra VARCHAR(50) UNIQUE,
    data_validade DATE
);

CREATE FULLTEXT INDEX idx_products_name ON products(nome_produto);

-- Tabela stores
CREATE TABLE stores (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_loja VARCHAR(150) NOT NULL,
    localizacao VARCHAR(250),
    contacto VARCHAR(100)
);

-- Tabela price_records
CREATE TABLE price_records (
    id INT AUTO_INCREMENT PRIMARY KEY,
    product_id INT NOT NULL,
    store_id INT NOT NULL,
    user_id INT NOT NULL,
    preco_atual DECIMAL(10,2) NOT NULL,
    data_recolha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    foto VARCHAR(255),
    FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE,
    FOREIGN KEY (store_id) REFERENCES stores(id) ON DELETE CASCADE,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

CREATE INDEX idx_price_records_product ON price_records(product_id);
CREATE INDEX idx_price_records_store ON price_records(store_id);

-- Inserir utilizador admin padrão (password = admin123)
INSERT INTO users (nome_completo, nome_utilizador, palavra_passe, nivel_permissao)
VALUES ('Administrador', 'admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');