package models

import "time"

const (
	FileStatusFailed = "failed"
	FileStatusReady  = "complete"
	FileStatusWait   = "pending"
	FileStatusWork   = "uploading"
)

const (
	ThumbnailStatusFailed      = "failed"
	ThumbnailStatusProcessing  = "processing"
	ThumbnailStatusReady       = "ready"
	ThumbnailStatusUnsupported = "unsupported"
)

type RetentionOption struct {
	Key     string `json:"key"`
	Label   string `json:"label"`
	Seconds int64  `json:"seconds"`
}

type BoxFile struct {
	ID              string  `json:"id"`
	Name            string  `json:"name"`
	Size            int64   `json:"size"`
	SizeLabel       string  `json:"size_label"`
	MimeType        string  `json:"mime_type"`
	Status          string  `json:"status"`
	StatusLabel     string  `json:"status_label"`
	Title           string  `json:"title"`
	IconPath        string  `json:"icon_path"`
	ThumbnailPath   *string `json:"thumbnail_path"`
	ThumbnailStatus string  `json:"thumbnail_status,omitempty"`
	ThumbnailURL    string  `json:"-"`
	DownloadPath    string  `json:"download_path"`
	UploadPath      string  `json:"upload_path"`
	IsComplete      bool    `json:"is_complete"`
}

type BoxManifest struct {
	Files           []BoxFile `json:"files"`
	CreatedAt       time.Time `json:"created_at"`
	ExpiresAt       time.Time `json:"expires_at"`
	RetentionKey    string    `json:"retention_key"`
	RetentionLabel  string    `json:"retention_label"`
	RetentionSecs   int64     `json:"retention_seconds"`
	PasswordSalt    string    `json:"password_salt,omitempty"`
	PasswordHash    string    `json:"password_hash,omitempty"`
	PasswordHashAlg string    `json:"password_hash_alg,omitempty"`
	AuthToken       string    `json:"auth_token,omitempty"`
	DisableZip      bool      `json:"disable_zip,omitempty"`
	OneTimeDownload bool      `json:"one_time_download,omitempty"`
}

type BoxSummary struct {
	ID                string
	FileCount         int
	TotalSize         int64
	TotalSizeLabel    string
	CreatedAt         time.Time
	ExpiresAt         time.Time
	Expired           bool
	OneTimeDownload   bool
	PasswordProtected bool
}

type CreateBoxRequest struct {
	Files        []CreateBoxFileRequest `json:"files"`
	RetentionKey string                 `json:"retention_key"`
	Password     string                 `json:"password"`
	AllowZip     *bool                  `json:"allow_zip"`
}

type CreateBoxFileRequest struct {
	Name string `json:"name"`
	Size int64  `json:"size"`
}

type UpdateFileStatusRequest struct {
	Status string `json:"status"`
}
