DROP TABLE IF EXISTS song_playlist;
DROP TABLE IF EXISTS song;
DROP TABLE IF EXISTS playlist;

CREATE TABLE song(
    -- In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the ROWID (except in WITHOUT ROWID tables) which is always a 64-bit signed integer. 
    id integer primary key,
    filepath varchar(511) UNIQUE,
    title varchar(255),
    album varchar(255),
    artist varchar(255),
    album_artist varchar(255),
    track_number integer,
    length_seconds integer,
    genre varchar(255),
    codec varchar(15),
    album_date date,
    bitrate int,
    date_added TIMESTAMP default CURRENT_TIMESTAMP
);

CREATE TABLE playlist(
    id integer primary key,
    name varchar(64),
    date_created TIMESTAMP default CURRENT_TIMESTAMP
);

CREATE TABLE song_playlist(
    playlist_id integer,
    song_id integer,
    date_created TIMESTAMP default CURRENT_TIMESTAMP,
    primary key (playlist_id, song_id),
    foreign key (playlist_id) references playlist(id),
    foreign key (song_id) references song(id)
);
