CREATE DATABASE IF NOT EXISTS pokedex;
USE pokedex;

-- Table to store Pokémon details
CREATE TABLE IF NOT EXISTS pokemon (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    height INT,
    weight INT,
    base_experience INT,
    species_url VARCHAR(255),
    image_url VARCHAR(255)
);

-- Table to store Pokémon types
CREATE TABLE IF NOT EXISTS types (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL UNIQUE
);

-- Table to store Pokémon abilities
CREATE TABLE IF NOT EXISTS abilities (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL
);

-- Table to store Pokémon stats
CREATE TABLE IF NOT EXISTS stats (
    id INT PRIMARY KEY AUTO_INCREMENT,
    pokemon_id INT,
    hp INT,
    attack INT,
    defense INT,
    sp_attack INT,
    sp_defense INT,
    speed INT,
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id)
);

-- Table to store Pokémon type relationships
CREATE TABLE IF NOT EXISTS pokemon_types (
    pokemon_id INT,
    type_id INT,
    PRIMARY KEY (pokemon_id, type_id),
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id),
    FOREIGN KEY (type_id) REFERENCES types(id)
);

-- Table to store Pokémon ability relationships
CREATE TABLE IF NOT EXISTS pokemon_abilities (
    pokemon_id INT,
    ability_id INT,
    PRIMARY KEY (pokemon_id, ability_id),
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id),
    FOREIGN KEY (ability_id) REFERENCES abilities(id)
);

-- Table to store Pokémon evolution chains
CREATE TABLE IF NOT EXISTS evolution_chains (
    id INT PRIMARY KEY AUTO_INCREMENT,
    chain_url VARCHAR(255) NOT NULL
);

-- Table to store Pokémon varieties
CREATE TABLE IF NOT EXISTS varieties (
    id INT PRIMARY KEY AUTO_INCREMENT,
    pokemon_id INT,
    variety_name VARCHAR(100),
    image_url VARCHAR(255),
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id)
);

-- Table to store Pokémon species details
CREATE TABLE IF NOT EXISTS species (
    id INT PRIMARY KEY AUTO_INCREMENT,
    pokemon_id INT,
    genus VARCHAR(100),
    flavor_text TEXT,
    growth_rate VARCHAR(100),
    base_happiness INT,
    capture_rate INT,
    gender_rate INT,
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id)
);

-- Table to store Pokémon egg groups
CREATE TABLE IF NOT EXISTS egg_groups (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL
);

-- Table to store Pokémon egg group relationships
CREATE TABLE IF NOT EXISTS pokemon_egg_groups (
    pokemon_id INT,
    egg_group_id INT,
    PRIMARY KEY (pokemon_id, egg_group_id),
    FOREIGN KEY (pokemon_id) REFERENCES pokemon(id),
    FOREIGN KEY (egg_group_id) REFERENCES egg_groups(id)
);
