-- drop table if exists model_data_point;
-- drop table if exists model_definition_layer;
-- drop table if exists model_definition;
-- drop table if exists models;
create table if not exists models (
    id uuid primary key default gen_random_uuid(),
    user_id uuid references users (id) not null,
    name varchar (70) not null,
    -- Status:
    -- -1: failed preparing
    -- 1: preparing
    status integer default 1,

    width integer,
    height integer,
    color_mode varchar (20)
);

-- drop table if exists model_data_point;
-- drop table if exists model_classes;
create table if not exists model_classes (
    id uuid primary key default gen_random_uuid(),
    model_id uuid references models (id) on delete cascade,
    name varchar (70) not null
);

-- drop table if exists model_data_point;
create table if not exists model_data_point (
    id uuid primary key default gen_random_uuid(),
    class_id uuid references model_classes (id) on delete cascade,
    file_path text not null,
    -- 1 training
    -- 2 testing
    model_mode integer default 1
);

-- drop table if exists model_definition; 
-- drop table if exists model_definition; 
create table if not exists model_definition (
    id uuid primary key default gen_random_uuid(),
    model_id uuid references models (id) on delete cascade,
    accuracy integer default 0,
    target_accuracy integer not null,
    epoch integer default 0,
    -- TODO add max epoch
    -- 1: Pre Init
    -- 2: Init
    -- 3: Training
    -- 4: Tranied
    -- 5: Ready
    status integer default 1,
    created_on timestamp default current_timestamp
);

-- drop table if exists model_definition_layer;
create table if not exists model_definition_layer (
    id uuid primary key default gen_random_uuid(),
    def_id uuid references model_definition (id) on delete cascade,
    layer_order integer not null,
    -- 1: input
    -- 2: dense
    -- 3: flatten
    -- TODO add conv
    layer_type integer not null,
    -- ei 28,28,1
    -- a 28x28 grayscale image
    shape text not null
);

