DROP TABLE IF EXISTS application, film, language, subtitle_line, Subtitle;

/**
  Store some information on the application.
 */
CREATE TABLE IF NOT EXISTS application
(
    id        int GENERATED ALWAYS AS IDENTITY,
    app_key   text NOT NULL,
    app_value text NOT NULL,
    PRIMARY KEY (id),
    UNIQUE (app_key)
);

/**
  Film
 */
CREATE TABLE IF NOT EXISTS film
(
    id           int GENERATED ALWAYS AS IDENTITY,
    imdb_id      varchar(10) NOT NULL,
    title        text        NOT NULL,
    release_date date,
    poster_link  text,
    PRIMARY KEY (id)
);

/**
  Available languages
 */
CREATE TABLE IF NOT EXISTS language
(
    id       int GENERATED ALWAYS AS IDENTITY,
    alpha3_b char(3) NOT NULL,
    alpha3_t char(3),
    alpha2   char(2),
    english  text    NOT NULL,
    french   text    NOT NULL,
    PRIMARY KEY (id)
);

/**
  Subtitles
 */
CREATE TABLE IF NOT EXISTS Subtitle
(
    id            int GENERATED ALWAYS AS IDENTITY,
    film_id       int         NOT NULL,
    language_id   int         NOT NULL,
    importer      varchar(37),
    imported_date timestamptz NOT NULL DEFAULT now(),
    UNIQUE (film_id, language_id),
    PRIMARY KEY (id),
    FOREIGN KEY (film_id)
        REFERENCES Film (id),
    FOREIGN KEY (language_id)
        REFERENCES Language (id)
);

/**
  Subtitle lines
 */
CREATE TABLE IF NOT EXISTS subtitle_line
(
    id          int GENERATED ALWAYS AS IDENTITY,
    subtitle_id int  NOT NULL,
    dialog_line text NOT NULL,
    time_code   text NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (subtitle_id)
        REFERENCES subtitle (id)
);