SET ROLE 'mo_osmo';

ALTER TABLE users
	ADD COLUMN is_test         boolean         NOT NULL DEFAULT false;         -- testovací účastník, není vidět ve výsledkovkách

CREATE TYPE round_state AS ENUM (
       'preparing',                    -- v přípravě (viditelné pouze organizátorům)
       'running',                      -- je možno odevzdávat
       'grading',                      -- je možno opravovat a vyplňovat body
       'closed'                        -- uzavřeno, není dovoleno nic měnit, zveřejněny výsledky
       -- Garanta stavy neomezují, vždycky může všechno.
       -- Ve stavu "running" mohou odevzdávat účastníci i dozor, a to i po termínu,
       -- jen se odevzdaná řešení zobrazují jako opožděná.
);

ALTER TABLE rounds
	ADD COLUMN state           round_state     NOT NULL DEFAULT 'preparing',   -- stav kola
	ADD COLUMN tasks_file      varchar(255)    DEFAULT NULL,                   -- jméno souboru se zadáním úloh
	ADD COLUMN ct_tasks_start  timestamp with time zone        DEFAULT NULL,   -- od kdy účastníci vidí zadání
	ADD COLUMN ct_submit_end   timestamp with time zone        DEFAULT NULL,   -- do kdy účastníci mohou regulérně odevzdávat
	ADD COLUMN pr_submit_end   timestamp with time zone        DEFAULT NULL;   -- do kdy dozor může regulérně odevzdávat

ALTER TABLE papers
	ADD COLUMN note            text            NOT NULL DEFAULT '';

ALTER TABLE solutions
	RENAME COLUMN last_submit TO final_submit,
	RENAME COLUMN last_feedback TO final_feedback;

CREATE TYPE job_type AS ENUM (
	'download_submits',
	'upload_feedback'
);

CREATE TYPE job_state AS ENUM (
	'ready',
	'running',
	'done',				-- Hotovo, out_json a out_file jsou platné
	'failed'			-- Interní chyba při zpracování, viz log
);

CREATE TABLE jobs (
	job_id		serial		PRIMARY KEY,
	type		job_type	NOT NULL,
	state		job_state	NOT NULL,
	user_id		int		NOT NULL REFERENCES users(user_id),			-- komu patří
	created_at	timestamp with time zone	NOT NULL DEFAULT CURRENT_TIMESTAMP,	-- kdy byl založen
	finished_at	timestamp with time zone	DEFAULT NULL,				-- kdy doběhl
	expires_at	timestamp with time zone	DEFAULT NULL,				-- kdy bude automaticky smazán
	description	text		NOT NULL DEFAULT '',
	in_json		jsonb		DEFAULT NULL,
	out_json	jsonb		DEFAULT NULL,
	-- Soubory jsou součástí úlohy a po jejím ukončení budou smazány
	in_file		varchar(255)	DEFAULT NULL,
	out_file	varchar(255)	DEFAULT NULL
);

ALTER TABLE places ADD CONSTRAINT "places_code_key" UNIQUE (code);
CREATE INDEX places_parent_index ON places (parent);
CREATE INDEX participations_contest_id_index ON participations (contest_id, place_id);
CREATE INDEX papers_for_task_index ON papers (for_task);
CREATE INDEX papers_for_user_index ON papers (for_user);
CREATE INDEX solutions_user_id_index ON solutions (user_id);
CREATE INDEX points_history_index ON points_history (task_id, participant_id);
CREATE INDEX log_type_id_index ON log (type, id);