-- script_full.sql
-- 1) Criar/atualizar tabelas principais

CREATE TABLE IF NOT EXISTS roles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(50) NOT NULL,
    descricao VARCHAR(255) DEFAULT NULL
);

CREATE TABLE IF NOT EXISTS user_roles (
    user_id INT NOT NULL,
    role_id INT NOT NULL,
    PRIMARY KEY (user_id, role_id)
);

ALTER TABLE user_roles
  ADD CONSTRAINT user_roles_user_fk
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;

ALTER TABLE user_roles
  ADD CONSTRAINT user_roles_role_fk
    FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE;


CREATE TABLE IF NOT EXISTS lojas_parceiras (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome_loja VARCHAR(100) NOT NULL,
    pais VARCHAR(50) DEFAULT 'ES',
    codigo_fixo VARCHAR(9) NOT NULL,
    status ENUM('ativo','inativo') DEFAULT 'ativo',
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS clientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    email VARCHAR(100) DEFAULT NULL,
    telefone VARCHAR(50) DEFAULT NULL,
    endereco VARCHAR(255) DEFAULT NULL,
    pais VARCHAR(50) DEFAULT 'ES',
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Se a tabela produtos já existir, ajustamos o ENUM para aceitar 'YUGARANTIA'
ALTER TABLE produtos
  MODIFY COLUMN tipo
    ENUM('TV','INTERNET','FIJO','MOVIL','YUGARANTIA') NOT NULL;

-- Caso não exista a tabela, criamos (só se não existir)
CREATE TABLE IF NOT EXISTS produtos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipo ENUM('TV','INTERNET','FIJO','MOVIL','YUGARANTIA') NOT NULL,
    nome_plano VARCHAR(150) NOT NULL,
    descricao TEXT,
    preco_mensal DECIMAL(10,2) DEFAULT 0.00,
    preco_anual DECIMAL(10,2) DEFAULT 0.00,
    pais_disponivel VARCHAR(50) DEFAULT 'ES',
    ativo TINYINT(1) DEFAULT 1,
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE IF NOT EXISTS vendas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    cliente_id INT NOT NULL,
    usuario_id INT NOT NULL,
    loja_id INT DEFAULT NULL,
    status ENUM('em_criacao','pendente_aprovacao','assinada','concluida','cancelada')
      DEFAULT 'em_criacao',
    data_venda DATETIME DEFAULT CURRENT_TIMESTAMP,
    valor_total DECIMAL(10,2) DEFAULT 0.00,
    observacoes TEXT DEFAULT NULL
);

ALTER TABLE vendas
  ADD CONSTRAINT vendas_cliente_fk
    FOREIGN KEY (cliente_id) REFERENCES clientes(id);

ALTER TABLE vendas
  ADD CONSTRAINT vendas_user_fk
    FOREIGN KEY (usuario_id) REFERENCES users(id);

ALTER TABLE vendas
  ADD CONSTRAINT vendas_loja_fk
    FOREIGN KEY (loja_id) REFERENCES lojas_parceiras(id);


CREATE TABLE IF NOT EXISTS itens_venda (
    id INT AUTO_INCREMENT PRIMARY KEY,
    venda_id INT NOT NULL,
    produto_id INT NOT NULL,
    quantidade INT DEFAULT 1,
    preco_unit DECIMAL(10,2) DEFAULT 0.00,

    iccid_yu VARCHAR(20) DEFAULT NULL,
    operador_donante VARCHAR(50) DEFAULT NULL,
    iccid_donante VARCHAR(20) DEFAULT NULL,
    tipo_portabilidade ENUM('contrato','prepag') DEFAULT NULL,

    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

ALTER TABLE itens_venda
  ADD CONSTRAINT itens_venda_venda_fk
    FOREIGN KEY (venda_id) REFERENCES vendas(id) ON DELETE CASCADE;

ALTER TABLE itens_venda
  ADD CONSTRAINT itens_venda_prod_fk
    FOREIGN KEY (produto_id) REFERENCES produtos(id);


CREATE TABLE IF NOT EXISTS logs_acoes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT DEFAULT NULL,
    acao VARCHAR(255) NOT NULL,
    ip VARCHAR(50) DEFAULT NULL,
    user_agent VARCHAR(255) DEFAULT NULL,
    criado_em DATETIME DEFAULT CURRENT_TIMESTAMP
);

ALTER TABLE logs_acoes
  ADD CONSTRAINT logs_acoes_user_fk
    FOREIGN KEY (user_id) REFERENCES users(id);


-- 2) INSERIR ROLES
INSERT IGNORE INTO roles (id, nome, descricao)
VALUES
(1, 'admin', 'Acesso total'),
(2, 'manager', 'Gerente'),
(3, 'seller', 'Vendedor'),
(4, 'support', 'Suporte');

INSERT IGNORE INTO user_roles (user_id, role_id)
VALUES (1,1);

-- 4) Loja Parceira Demo
INSERT IGNORE INTO lojas_parceiras (id, nome_loja, pais, codigo_fixo, status)
VALUES (1, 'Loja Demo', 'ES', '123456789', 'ativo');

-- 5) PRODUTOS BÁSICOS (TV, INTERNET, FIJO, MOVIL)
INSERT IGNORE INTO produtos (tipo, nome_plano, descricao, preco_mensal, preco_anual, pais_disponivel, ativo)
VALUES
('TV','YU TV Básico','TV básico ~68 canais',0,0,'ES',1),
('TV','Masmedia TV Cero Básico','~80 canais',3,0,'ES',1),
('INTERNET','Fibra PRO 300Mb','300Mb sin permanencia',10,100,'ES',1),
('INTERNET','Fibra PRO 500Mb','500Mb sin permanencia',13.9,168.9,'ES',1),
('FIJO','Fijo Básico','Ilimitado fixo +60min móvel',0,0,'ES',1),
('MOVIL','2GB','2GB dados',1.95,5,'ES',1),
('MOVIL','5GB + Ilimitadas','5GB + voz ilimitada',3.95,7,'ES',1);


-- 6) YUGARANTIA: Mensal
INSERT IGNORE INTO produtos
(tipo, nome_plano, descricao, preco_mensal, preco_anual, pais_disponivel, ativo)
VALUES
('YUGARANTIA','Mensal - 0-50€ (Extra)','Garantia Extra Mensal (0-50€)',0.30,0.00,'ES',1),
('YUGARANTIA','Mensal - 0-50€ (Danos)','Cobertura Danos Mensal (0-50€)',0.70,0.00,'ES',1),

('YUGARANTIA','Mensal - 51-100€ (Extra)','Garantia Extra Mensal (51-100€)',0.50,0.00,'ES',1),
('YUGARANTIA','Mensal - 51-100€ (Danos)','Cobertura Danos Mensal (51-100€)',1.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 101-150€ (Extra)','Garantia Extra Mensal (101-150€)',0.80,0.00,'ES',1),
('YUGARANTIA','Mensal - 101-150€ (Danos)','Cobertura Danos Mensal (101-150€)',1.50,0.00,'ES',1),

('YUGARANTIA','Mensal - 151-200€ (Extra)','Garantia Extra Mensal (151-200€)',1.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 151-200€ (Danos)','Cobertura Danos Mensal (151-200€)',2.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 201-300€ (Extra)','Garantia Extra Mensal (201-300€)',1.50,0.00,'ES',1),
('YUGARANTIA','Mensal - 201-300€ (Danos)','Cobertura Danos Mensal (201-300€)',2.50,0.00,'ES',1),

('YUGARANTIA','Mensal - 301-500€ (Extra)','Garantia Extra Mensal (301-500€)',2.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 301-500€ (Danos)','Cobertura Danos Mensal (301-500€)',3.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 501-700€ (Extra)','Garantia Extra Mensal (501-700€)',3.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 501-700€ (Danos)','Cobertura Danos Mensal (501-700€)',4.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 701-1000€ (Extra)','Garantia Extra Mensal (701-1000€)',4.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 701-1000€ (Danos)','Cobertura Danos Mensal (701-1000€)',5.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 1001-1500€ (Extra)','Garantia Extra Mensal (1001-1500€)',5.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 1001-1500€ (Danos)','Cobertura Danos Mensal (1001-1500€)',7.00,0.00,'ES',1),

('YUGARANTIA','Mensal - 1501-2000€ (Extra)','Garantia Extra Mensal (1501-2000€)',6.00,0.00,'ES',1),
('YUGARANTIA','Mensal - 1501-2000€ (Danos)','Cobertura Danos Mensal (1501-2000€)',9.00,0.00,'ES',1);


-- 7) YUGARANTIA: Pagamento Único (PU)
INSERT IGNORE INTO produtos
(tipo, nome_plano, descricao, preco_mensal, preco_anual, pais_disponivel, ativo)
VALUES
('YUGARANTIA','PU 0-50€ (1 ano Extra)','Garantia Extra PU 1 ano (0-50€)',0.00,5.00,'ES',1),
('YUGARANTIA','PU 0-50€ (2 anos Extra)','Garantia Extra PU 2 anos (0-50€)',0.00,6.00,'ES',1),
('YUGARANTIA','PU 0-50€ (3 anos Extra)','Garantia Extra PU 3 anos (0-50€)',0.00,8.00,'ES',1),
('YUGARANTIA','PU 0-50€ (Danos 1º ano)','Proteção Danos PU 1 ano (0-50€)',0.00,20.00,'ES',1),

('YUGARANTIA','PU 51-100€ (1 ano Extra)','Garantia Extra PU 1 ano (51-100€)',0.00,8.00,'ES',1),
('YUGARANTIA','PU 51-100€ (2 anos Extra)','Garantia Extra PU 2 anos (51-100€)',0.00,10.00,'ES',1),
('YUGARANTIA','PU 51-100€ (3 anos Extra)','Garantia Extra PU 3 anos (51-100€)',0.00,15.00,'ES',1),
('YUGARANTIA','PU 51-100€ (Danos 1º ano)','Proteção Danos PU 1 ano (51-100€)',0.00,30.00,'ES',1),

('YUGARANTIA','PU 101-150€ (1 ano Extra)','Garantia Extra PU 1 ano (101-150€)',0.00,12.00,'ES',1),
('YUGARANTIA','PU 101-150€ (2 anos Extra)','Garantia Extra PU 2 anos (101-150€)',0.00,16.00,'ES',1),
('YUGARANTIA','PU 101-150€ (3 anos Extra)','Garantia Extra PU 3 anos (101-150€)',0.00,20.00,'ES',1),
('YUGARANTIA','PU 101-150€ (Danos 1º ano)','Proteção Danos PU 1 ano (101-150€)',0.00,40.00,'ES',1);

-- etc. Se quiser continuar para 151-200, 201-300..., repita o padrão.

-- FIM DO script_full.sql
