package messagewall

type Layout struct {
	Version         int             `json:"version"`
	CoordinateSpace CoordinateSpace `json:"coordinate_space"`
	FitMode         string          `json:"fit_mode"`
	Slots           []Slot          `json:"slots"`
}

type CoordinateSpace struct {
	Width  int    `json:"width"`
	Height int    `json:"height"`
	Unit   string `json:"unit"`
}

type Slot struct {
	SlotID string `json:"slot_id"`
	X      int    `json:"x"`
	Y      int    `json:"y"`
	Width  int    `json:"width"`
	Height int    `json:"height"`
}

type ResolveRequest struct {
	Layout             Layout `json:"layout"`
	Source             string `json:"source"`
	DurationSeconds    int    `json:"duration_seconds"`
	LoadTimeoutSeconds int    `json:"load_timeout_seconds"`
	OnError            string `json:"on_error"`
}

type ResolveResult struct {
	Version         int              `json:"version"`
	CoordinateSpace CoordinateSpace  `json:"coordinate_space"`
	FitMode         string           `json:"fit_mode"`
	Scenes          []ResolvedScene  `json:"scenes"`
}

type ResolvedScene struct {
	SlotID              string `json:"slot_id"`
	Source              string `json:"source"`
	DurationSeconds     int    `json:"duration_seconds"`
	LoadTimeoutSeconds  int    `json:"load_timeout_seconds"`
	OnError             string `json:"on_error"`
	Crop                Crop   `json:"crop"`
}

type Crop struct {
	X      int    `json:"x"`
	Y      int    `json:"y"`
	Width  int    `json:"width"`
	Height int    `json:"height"`
	Unit   string `json:"unit"`
}
