CREATE TABLE IF NOT EXISTS "user" (
	"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
	"name" text NOT NULL UNIQUE,
	"pw" text, 
	"is_cox" boolean NOT NULL DEFAULT FALSE,
	"is_admin" boolean NOT NULL DEFAULT FALSE,
	"is_guest" boolean NOT NULL DEFAULT TRUE
);

CREATE TABLE IF NOT EXISTS "trip_details" (
	"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
	"planned_starting_time" text NOT NULL,
	"max_people" INTEGER NOT NULL,
	"day" TEXT NOT NULL,
	"notes" TEXT
);

CREATE TABLE IF NOT EXISTS "planned_event" (
	"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
	"name" text NOT NULL,
	"planned_amount_cox" INTEGER unsigned NOT NULL,
	"allow_guests" boolean NOT NULL default false,
	"trip_details_id" INTEGER NOT NULL,
	"created_at" text NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY(trip_details_id) REFERENCES trip_details(id) ON DELETE CASCADE
);

CREATE TABLE IF NOT EXISTS "trip" (
	"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
	"cox_id" INTEGER NOT NULL,
	"trip_details_id" INTEGER,
	"planned_event_id" INTEGER,
	"created_at" text NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY(cox_id) REFERENCES user(id),
	FOREIGN KEY(trip_details_id) REFERENCES trip_details(id) ON DELETE CASCADE,
	FOREIGN KEY(planned_event_id) REFERENCES planned_event(id) ON DELETE CASCADE,
	CONSTRAINT unq UNIQUE (cox_id, planned_event_id) -- allow cox to participate only once for each planned event
);

CREATE TABLE IF NOT EXISTS "user_trip" (
	"user_id" INTEGER NOT NULL,
	"trip_details_id" INTEGER NOT NULL,
	"created_at" text NOT NULL DEFAULT CURRENT_TIMESTAMP,
	FOREIGN KEY(user_id) REFERENCES user(id),
	FOREIGN KEY(trip_details_id) REFERENCES trip_details(id),
	CONSTRAINT unq UNIQUE (user_id, trip_details_id) -- allow user to participate only once for each trip
);