-- Create Groups Table. Users are split into groups. Users review songs in their respective group.
CREATE TABLE groups (
    id UUID PRIMARY KEY,
    group_name STRING NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Create Users Table (Updated with Foreign Key for Group)
CREATE TABLE users (
    id UUID PRIMARY KEY,
    name STRING DEFAULT NULL,
    username STRING UNIQUE NOT NULL,
    email STRING UNIQUE DEFAULT NULL,
    group_id UUID,
    password STRING NOT NULL, -- Hashed password
    last_login_time TIMESTAMP DEFAULT NULL,
    is_admin BOOLEAN DEFAULT FALSE,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (group_id) REFERENCES groups(id)
);

-- Create Contest Table
CREATE TABLE contests (
    id UUID PRIMARY KEY,
    city_name STRING NOT NULL, -- Name of the city where the contest is held.
    date DATE NOT NULL, -- Date when the contest is to be held.
    round STRING NOT NULL, -- Can be one of "1st semifinal", "2nd semifinal", "final"
    is_active BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Create Song Table
CREATE TABLE songs (
    id UUID PRIMARY KEY,
    artist_name STRING NOT NULL,
    song_title STRING NOT NULL,
    country STRING NOT NULL,
    lyrics TEXT DEFAULT NULL,
    song_meaning TEXT DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Create Reviews Table
CREATE TABLE reviews (
    id UUID PRIMARY KEY,
    contest_id UUID,
    song_id UUID,
    reviewer_id UUID,
    song_score INTEGER CHECK (song_score BETWEEN 1 AND 100),
    wardrobe_score INTEGER CHECK (wardrobe_score BETWEEN 1 AND 100),
    stage_show_score INTEGER CHECK (stage_show_score BETWEEN 1 AND 100),
    review_text TEXT DEFAULT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (contest_id) REFERENCES contests(id),
    FOREIGN KEY (song_id) REFERENCES songs(id),
    FOREIGN KEY (reviewer_id) REFERENCES users(id)
);

