-- CRIAÇÃO DO BANCO DE DADOS
DROP DATABASE IF EXISTS fitness_life;
CREATE DATABASE fitness_life;
USE fitness_life;

--ROUBAMOS SEUS BANCOS DE DADOS PROFESSOR DA PROVA E COPIAMOS IGUAL PARA O NOSSO!KKKKKKK

--  CRIAÇÃO DAS TABELAS
DROP TABLE IF EXISTS `Endereco`;
CREATE TABLE Endereco (
    id_endereco INT AUTO_INCREMENT,
    rua VARCHAR(100) NOT NULL,
    numero VARCHAR(20) NOT NULL,
    bairro VARCHAR(50) NOT NULL,
    cidade VARCHAR(50) NOT NULL,
    cep VARCHAR(10) NOT NULL,
    CONSTRAINT PK_Endereco PRIMARY KEY (id_endereco)
);
DROP TABLE IF EXISTS `Plano`;
CREATE TABLE Plano (
    id_plano INT AUTO_INCREMENT,
    nome VARCHAR(100) NOT NULL,
    valor DECIMAL(10,2) NOT NULL,
    duracao INT NOT NULL, 
    CONSTRAINT PK_Plano PRIMARY KEY (id_plano),
    CONSTRAINT CHK_Plano_Valor CHECK (valor > 0), 
    CONSTRAINT CHK_Plano_Duracao CHECK (duracao > 0) 
);

DROP TABLE IF EXISTS `Aluno`;
CREATE TABLE Aluno (
    id_aluno INT AUTO_INCREMENT,
    nome VARCHAR(50) NOT NULL,
    cpf VARCHAR(14) NOT NULL UNIQUE,
    data_nascimento DATE NOT NULL,
    telefone VARCHAR(15),
    email VARCHAR(50),
    id_endereco INT NOT NULL,
    CONSTRAINT PK_Aluno PRIMARY KEY (id_aluno),
    CONSTRAINT FK_Aluno_Endereco FOREIGN KEY (id_endereco) REFERENCES Endereco(id_endereco)
);
DROP TABLE IF EXISTS `Contrato`;
CREATE TABLE Contrato (
    id_contrato INT AUTO_INCREMENT,
    id_plano INT NOT NULL,
    id_aluno INT NOT NULL,
    data_contrato DATE NOT NULL,
    status VARCHAR(20) NOT NULL,
    CONSTRAINT PK_Contrato PRIMARY KEY (id_contrato),
    CONSTRAINT FK_Contrato_Plano FOREIGN KEY (id_plano) REFERENCES Plano(id_plano),
    CONSTRAINT FK_Contrato_Aluno FOREIGN KEY (id_aluno) REFERENCES Aluno(id_aluno),
    CONSTRAINT CHK_Contrato_Status CHECK (status IN ('Ativo', 'Inativo', 'Cancelado')) 
);

DROP TABLE IF EXISTS `Pagamento`;
CREATE TABLE Pagamento (
    id_pagamento INT AUTO_INCREMENT,
    data_pagamento DATE NOT NULL,
    valor DECIMAL(10,2) NOT NULL,
    status VARCHAR(20) NOT NULL,
    id_contrato INT NOT NULL,
    CONSTRAINT PK_Pagamento PRIMARY KEY (id_pagamento),
    CONSTRAINT FK_Pagamento_Contrato FOREIGN KEY (id_contrato) REFERENCES Contrato(id_contrato),
    CONSTRAINT CHK_Pagamento_Status CHECK (status IN ('Pago', 'Pendente', 'Atrasado')) 
);

DROP TABLE IF EXISTS `Instrutor`;
CREATE TABLE Instrutor (
    id_instrutor INT AUTO_INCREMENT,
    nome VARCHAR(50) NOT NULL,
    telefone VARCHAR(15),
    CONSTRAINT PK_Instrutor PRIMARY KEY (id_instrutor)

);
DROP TABLE IF EXISTS `Especialidade`;
CREATE TABLE Especialidade (
    id_especialidade INT AUTO_INCREMENT,
    nome_especialidade VARCHAR(50) NOT NULL,
    CONSTRAINT PK_Especialidade PRIMARY KEY (id_especialidade)
);

DROP TABLE IF EXISTS `Instrutor_Especialidade`;
CREATE TABLE Instrutor_Especialidade (
    id_instrutor INT,
    id_especialidade INT,
    CONSTRAINT PK_Instrutor_Especialidade PRIMARY KEY (id_instrutor, id_especialidade),
    CONSTRAINT FK_IE_Instrutor FOREIGN KEY (id_instrutor) REFERENCES Instrutor(id_instrutor) ON DELETE CASCADE,
    CONSTRAINT FK_IE_Especialidade FOREIGN KEY (id_especialidade) REFERENCES Especialidade(id_especialidade) ON DELETE CASCADE
);

DROP TABLE IF EXISTS `Treino`;
CREATE TABLE Treino (
    id_treino INT AUTO_INCREMENT,
    id_aluno INT NOT NULL,
    id_instrutor INT NOT NULL,
    data_inicio DATE NOT NULL,
    data_fim DATE NOT NULL,
    data_execucao DATE,
    CONSTRAINT PK_Treino PRIMARY KEY (id_treino),
    CONSTRAINT FK_Treino_Aluno FOREIGN KEY (id_aluno) REFERENCES Aluno(id_aluno),
    CONSTRAINT FK_Treino_Instrutor FOREIGN KEY (id_instrutor) REFERENCES Instrutor(id_instrutor)
);
DROP TABLE IF EXISTS `Exercicio`;
CREATE TABLE Exercicio (
    id_exercicio INT AUTO_INCREMENT,
    nome VARCHAR(100) NOT NULL,
    grupo_muscular ENUM('Peito', 'Costas', 'Pernas', 'Ombro', 'Biceps', 'Triceps', 'Abdomen') NOT NULL,
    descricao VARCHAR(500),
    CONSTRAINT PK_Exercicio PRIMARY KEY (id_exercicio)
);

DROP TABLE IF EXISTS `Treino_Exercicio`;
CREATE TABLE Treino_Exercicio (
    id_treino INT,
    id_exercicio INT,
    CONSTRAINT PK_Treino_Exercicio PRIMARY KEY (id_treino, id_exercicio),
    CONSTRAINT FK_TE_Treino FOREIGN KEY (id_treino) REFERENCES Treino(id_treino) ON DELETE CASCADE,
    CONSTRAINT FK_TE_Exercicio FOREIGN KEY (id_exercicio) REFERENCES Exercicio(id_exercicio) ON DELETE CASCADE
);
DROP TABLE IF EXISTS `Frequencia`;
CREATE TABLE Frequencia (
    id_frequencia INT AUTO_INCREMENT,
    data DATE NOT NULL,
    hora_entrada TIME NOT NULL,
    hora_saida TIME,
    id_aluno INT NOT NULL,
    CONSTRAINT PK_Frequencia PRIMARY KEY (id_frequencia),
    CONSTRAINT FK_Frequencia_Aluno FOREIGN KEY (id_aluno) REFERENCES Aluno(id_aluno)
);


-- INSERÇÃO DOS DADOS 


INSERT INTO Endereco (rua, numero, bairro, cidade, cep) VALUES
('Av. Central', '123', 'Centro', 'São Bento do Sul', '89201-000'),
('Ria das Flores', '45', 'Boehmerwald', 'São Bento do Sul', '89202-120'),
('Alamedas das Palmeiras', '789', 'Cruzeiro', 'São bento do Sul', '89203-340'),
('Rua São Paulo', '1010', 'Serra Alta', 'São bento do Sul', '89204-020'),
('Av. Getúlio Vargas', '55', '25 de Julho', 'São bento do Sul', '89205-500'),
('Rua XV de Novembro', '321', 'Rio Vermelho', 'São bento do Sul', '89206-110');

INSERT INTO Plano (nome, valor, duracao) VALUES
('Mensal Bronze', 99.90, 1),
('Trimestral Prata', 269.70, 3),
('Semestral Ouro', 479.40, 6),
('Anual Black', 838.80, 12),
('Plano Universitário', 79.90, 1),
('Plano VIP Individual', 199.90, 1);

INSERT INTO Aluno (nome, cpf, data_nascimento, telefone, email, id_endereco) VALUES
('Mariane Zoellner', '111.222.333-44', '2002-05-15', '(47) 99111-2222', 'mariane@email.com', 1),
('Luana Humochinski', '555.666.777-88', '2003-08-22', '(47) 99222-3333', 'luana@email.com', 2),
('Carlos Antonio Tamanini', '222.333.444-55', '1995-03-10', '(47) 99333-4444', 'carlos@email.com', 3),
('Ana Souza', '333.444.555-66', '1998-11-04', '(47) 99444-5555', 'ana@email.com', 4),
('Diego Oliveira', '444.555.666-77', '1990-07-30', '(47) 99555-6666', 'bruno@email.com', 5),
('Julia Costa', '666.777.888-99', '2000-01-25', '(47) 99666-7777', 'julia@email.com', 6);

INSERT INTO Contrato (id_plano, id_aluno, data_contrato, status) VALUES
(4, 1, '2026-01-10', 'Ativo'),
(3, 2, '2026-02-15', 'Ativo'),
(1, 3, '2026-06-01', 'Ativo'),
(2, 4, '2026-05-10', 'Ativo'),
(5, 5, '2026-06-20', 'Ativo'),
(6, 6, '2026-06-25', 'Ativo');

INSERT INTO Pagamento (data_pagamento, valor, status, id_contrato) VALUES
('2026-01-10', 838.80, 'Pago', 1),
('2026-02-15', 479.40, 'Pago', 2),
('2026-06-01', 99.90, 'Pago', 3),
('2026-05-10', 269.70, 'Pago', 4),
('2026-06-20', 79.90, 'Pago', 5),
('2026-06-25', 199.90, 'Pago', 6);

INSERT INTO Instrutor (nome, telefone) VALUES
('Diego Buchinger', '(47) 98888-1111'),
('Roberto Almeida', '(47) 98888-2222'),
('Amanda Lima', '(47) 98888-3333'),
('Fernando Souza', '(47) 98888-4444'),
('Camila Rocha', '(47) 98888-5555'),
('Rodrigo Pires', '(47) 98888-6666');

INSERT INTO Especialidade (nome_especialidade) VALUES
('Musculação Clássica'),
('Treinamento Funcional'),
('Cardio / HIIT'),
('Pilates'),
('Fisioterapia Desportiva'),
('Nutrição de Treino');

INSERT INTO Instrutor_Especialidade (id_instrutor, id_especialidade) VALUES
(1, 1), (1, 2),
(2, 2),
(3, 3), (3, 4),
(4, 1),
(5, 5),
(6, 6);

INSERT INTO Treino (id_aluno, id_instrutor, data_inicio, data_fim, data_execucao) VALUES
(1, 1, '2026-06-01', '2026-08-01', '2026-06-01'),
(2, 1, '2026-06-05', '2026-08-05', '2026-06-05'),
(3, 2, '2026-06-10', '2026-07-10', '2026-06-11'),
(4, 3, '2026-06-12', '2026-08-12', '2026-06-12'),
(5, 4, '2026-06-15', '2026-07-15', '2026-06-15'),
(6, 5, '2026-06-20', '2026-09-20', '2026-06-20');

INSERT INTO Exercicio (nome, grupo_muscular, descricao) VALUES
('Supino Reto', 'Peito', 'Executado na barra guiada ou livre para porção média do peito.'),
('Agachamento Livre', 'Pernas', 'Flexão de joelhos com barra sobre os ombros.'),
('Puxada Alta', 'Costas', 'Desenvolvimento de dorsais na polia alta.'),
('Desenvolvimento Halteres', 'Ombro', 'Elevação vertical de halteres assentado.'),
('Rosca Direta', 'Biceps', 'Flexão de cotovelos com barra reta ou W.'),
('Tríceps Corda', 'Triceps', 'Extensão de cotovelos na polia baixa com corda.');

INSERT INTO Treino_Exercicio (id_treino, id_exercicio) VALUES
(1, 1), (1, 5), (1, 6),
(2, 2), (2, 4),
(3, 3),
(4, 2), (4, 3),
(5, 1), (5, 6),
(6, 4);

INSERT INTO Frequencia (data, hora_entrada, hora_saida, id_aluno) VALUES
('2026-06-29', '07:00:00', '08:30:00', 1),
('2026-06-29', '18:00:00', '19:15:00', 2),
('2026-06-30', '06:45:00', '08:00:00', 3),
('2026-06-30', '19:30:00', '21:00:00', 4),
('2026-07-01', '08:00:00', '09:30:00', 5),
('2026-07-01', '12:00:00', '13:00:00', 6);








-- CRIAÇÃO DOS USUÁRIOS


CREATE USER IF NOT EXISTS 'Mariani'@'localhost' IDENTIFIED BY 'melhorprofessor';
GRANT ALL PRIVILEGES ON fitness_life.* TO 'Mariani'@'localhost';

CREATE USER IF NOT EXISTS 'Luana'@'localhost' IDENTIFIED BY 'melhorprofessor';
GRANT SELECT, INSERT ON fitness_life.* TO 'Luana'@'localhost';

FLUSH PRIVILEGES;


-- USAR PARA ACESSAR O BANCO DE DADOS QUANDO ELE JÁ FOI CRIADO


USE fitness_life;



-- FOI TRABALHOSO COPIAR E COLAR TODOS OS DROP TABLES, MINIMO 10 HEIN KKKK 