CREATE PUBLICATION v_man_1 FOR ALL TABLES;

create extension pgcrypto;

create table users (
    id bigint primary key generated always as identity,
    username text not null unique,
    email text not null unique,
    password_hash text not null
);

create table categories (
    id bigint primary key generated always as identity,
    name text not null unique
);

create table lists (
    id bigint primary key generated always as identity,
    user_id bigint not null references users (id),
    name text not null
);

create table tasks (
    id bigint primary key generated always as identity,
    list_id bigint not null references lists (id),
    category_id bigint references categories (id),
    title text not null,
    description text,
    due_date date,
    priority int,
    completed boolean default false
);

INSERT INTO
    users (username, email, password_hash)
VALUES
    (
        'ted.tester',
        'ted.tester@example.com',
        crypt ('password', gen_salt ('bf'))
    );

INSERT INTO
    categories (name)
VALUES
    ('Groceries'),
    ('Work'),
    ('Personal'),
    ('Other');

INSERT INTO
    public.lists (user_id, name)
VALUES
    (1, 'Groceries');

INSERT INTO
    public.tasks (list_id, category_id, title)
VALUES
    (1, 1, 'Orange Juice');