using Go = import "/go.capnp";
@0xcd7129bab3129d29;
$Go.package("protocol");
$Go.import("protocol");

struct Film {
	id @0 :UInt64;
	title @1 :Text;
	genres @2 :List(Text);
	releaseDate @3 :Date;

	struct Date {
		year @0 :Int16;
		month @1 :UInt8;
		day @2 :UInt8;
	}

	originalTitle @4 :Text;
	overview @5 :Text;
	tagline @6 :Text;
	runtime @7 :UInt16;
	isAdult @8 :Bool;
	mark @9 :Float32;
	voteCount @10 :UInt64;

	status @11 :Status;

	enum Status {
		rumored @0         $Go.tag("Rumored");
		planned @1         $Go.tag("Planned");
		inProduction @2    $Go.tag("In Production");
		postProduction @3  $Go.tag("Post Production");
		released @4        $Go.tag("Released");
		cancelled @5       $Go.tag("Cancelled");
	}

	posterPath @12 :Text;
	backdropPath @13 :Text;
	
	collection @14 :Collection;

	struct Collection {
		name @0 :Text;
		parts @1 :List(CollectionPart);

		struct CollectionPart {
			id @0 :UInt64;
			title @1 :Text;
			releaseDate @2 :Date;
			posterPath @3 :Text;
		}
	}

	cast @15 :List(Character);

	struct Character {
		person @0 :Person;
		name @1 :Text;
	}

	crew @16: List(CrewMember);

	struct CrewMember {
		person @0 :Person;
		job @1 :Text;
	}
}

struct Person {
	id @0 :UInt64;
	name @1 :Text;
	photoPath @2 :Text;
}
