CREATE TABLE condition_descriptions (
    parent INTEGER NOT NULL,
    timestamp TEXT NOT NULL,
    description TEXT NOT NULL,
    PRIMARY KEY (parent, timestamp),
    FOREIGN KEY (parent) REFERENCES conditions(id)
);
CREATE TABLE condition_titles (
    parent INTEGER NOT NULL,
    timestamp TEXT NOT NULL,
    title TEXT NOT NULL,
    PRIMARY KEY (parent, timestamp),
    FOREIGN KEY (parent) REFERENCES conditions(id)
);
CREATE TABLE conditions (
    id INTEGER PRIMARY KEY,
    is_active BOOLEAN NOT NULL
);
CREATE TABLE days (
    id TEXT PRIMARY KEY,
    comment TEXT NOT NULL
);
CREATE TABLE process_conditions (
    process INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY (process, condition),
    FOREIGN KEY (process) REFERENCES processes(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE process_descriptions (
    parent INTEGER NOT NULL,
    timestamp TEXT NOT NULL,
    description TEXT NOT NULL,
    PRIMARY KEY (parent, timestamp),
    FOREIGN KEY (parent) REFERENCES processes(id)
);
CREATE TABLE process_disables (
    process INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY(process, condition),
    FOREIGN KEY (process) REFERENCES processes(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE process_efforts (
    parent INTEGER NOT NULL,
    timestamp TEXT NOT NULL,
    effort REAL NOT NULL,
    PRIMARY KEY (parent, timestamp),
    FOREIGN KEY (parent) REFERENCES processes(id)
);
CREATE TABLE process_enables (
    process INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY(process, condition),
    FOREIGN KEY (process) REFERENCES processes(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE process_steps (
    id INTEGER PRIMARY KEY,
    owner INTEGER NOT NULL,
    step_process INTEGER NOT NULL,
    parent_step INTEGER,
    FOREIGN KEY (owner) REFERENCES processes(id),
    FOREIGN KEY (step_process) REFERENCES processes(id),
    FOREIGN KEY (parent_step) REFERENCES process_steps(step_id)
);
CREATE TABLE process_titles (
    parent INTEGER NOT NULL,
    timestamp TEXT NOT NULL,
    title TEXT NOT NULL,
    PRIMARY KEY (parent, timestamp),
    FOREIGN KEY (parent) REFERENCES processes(id)
);
CREATE TABLE processes (
    id INTEGER PRIMARY KEY
);
CREATE TABLE todo_children (
    parent INTEGER NOT NULL,
    child INTEGER NOT NULL,
    PRIMARY KEY (parent, child),
    FOREIGN KEY (parent) REFERENCES todos(id),
    FOREIGN KEY (child) REFERENCES todos(id)
);
CREATE TABLE todo_conditions (
    todo INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY(todo, condition),
    FOREIGN KEY (todo) REFERENCES todos(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE todo_disables (
    todo INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY(todo, condition),
    FOREIGN KEY (todo) REFERENCES todos(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE todo_enables (
    todo INTEGER NOT NULL,
    condition INTEGER NOT NULL,
    PRIMARY KEY(todo, condition),
    FOREIGN KEY (todo) REFERENCES todos(id),
    FOREIGN KEY (condition) REFERENCES conditions(id)
);
CREATE TABLE todos (
    id INTEGER PRIMARY KEY,
    process INTEGER NOT NULL,
    is_done BOOLEAN NOT NULL,
    day TEXT NOT NULL,
    FOREIGN KEY (process) REFERENCES processes(id),
    FOREIGN KEY (day) REFERENCES days(id)
);
