package main

// Location is a top level component that starts the containerization process
type Location struct {
	ID            int    `storm:"id,increment,index"`
	Name          string `storm:"unique"`
	Description   string
	Notes         string
	Address       string
	SquareFeet    int
	Latitude      string
	Longitude     string
	DatePurchased string
	PurchasePrice string
	CurrentValue  string
	CoverPhoto    string   // A "cover photo" for the location
	Photos        []string // A list of additional photos for the location
	Files         []string
	Rooms         []Room
}

// Room is a containerized area at a location
type Room struct {
	ID           int `storm:"id,increment,index"`
	Name         string
	Description  string
	Paint        string // Details about the paint
	Notes        string
	SquareFeet   int
	CoverPhoto   string   // A "cover photo" for the room
	Photos       []string // A list of additional photos for the room
	Cabinets     []Cabinet
	Items        []Item
	LocationID   int    //Which location room is assigned to
	LocationName string // Location name room belongs to

}

// Cabinet is a containerized area in a room
type Cabinet struct {
	ID         int    `storm:"id,increment,index"`
	RoomID     int    // Room ID that the cabinet is assigned to
	RoomName   string // Room name cabinet belongs to
	CoverPhoto string // A "Cover photo" for this item
	Items      []Item // List of items in the cabinet
	Name       string
	Notes      string
}

// Item is contained inside a room or cabinet
type Item struct {
	ID            int      `storm:"id,increment,index"`
	LocType       string   // Can be Room or Cabinet to show where it is stored
	RoomID        int      // Room ID that item is assigned to (can also be in a cabinet)
	RoomName      string   // Room name that item is assigned to
	CabinetID     int      //The cabinet id that an item is assigned to
	CabinetName   string   // The name of the cabinet it belongs to
	CoverPhoto    string   // A "cover photo" for the item
	Photos        []string // A list of additional photos for the item
	Count         int      // If item has duplicates
	Name          string
	Product       string
	Serial        string
	Warranty      string
	Notes         string
	DatePurchased string
	Files         []string //filepath to any files relevant to this item
}

// DatabaseOverview provides some details about the database
type DatabaseOverview struct {
	NumLocations      int
	LastAddedLocation *Location
	NumRooms          int
	LastAddedRoom     *Room
	NumCabinets       int
	LastAddedCabinet  *Cabinet
	NumItems          int
	LastAddedItem     *Item
}
