package fichier

// FileInfoRequest is the request structure of the corresponding request
type FileInfoRequest struct {
	URL string `json:"url"`
}

// ListFolderRequest is the request structure of the corresponding request
type ListFolderRequest struct {
	FolderID int `json:"folder_id"`
}

// ListFilesRequest is the request structure of the corresponding request
type ListFilesRequest struct {
	FolderID int `json:"folder_id"`
}

// DownloadRequest is the request structure of the corresponding request
type DownloadRequest struct {
	URL    string `json:"url"`
	Single int    `json:"single"`
	Pass   string `json:"pass,omitempty"`
	CDN    int    `json:"cdn,omitempty"`
}

// RemoveFolderRequest is the request structure of the corresponding request
type RemoveFolderRequest struct {
	FolderID int `json:"folder_id"`
}

// RemoveFileRequest is the request structure of the corresponding request
type RemoveFileRequest struct {
	Files []RmFile `json:"files"`
}

// RmFile is the request structure of the corresponding request
type RmFile struct {
	URL string `json:"url"`
}

// GenericOKResponse is the response structure of the corresponding request
type GenericOKResponse struct {
	Status  string `json:"status"`
	Message string `json:"message"`
}

// MakeFolderRequest is the request structure of the corresponding request
type MakeFolderRequest struct {
	Name     string `json:"name"`
	FolderID int    `json:"folder_id"`
}

// MakeFolderResponse is the response structure of the corresponding request
type MakeFolderResponse struct {
	Name     string `json:"name"`
	FolderID int    `json:"folder_id"`
}

// MoveFileRequest is the request structure of the corresponding request
type MoveFileRequest struct {
	URLs     []string `json:"urls"`
	FolderID int      `json:"destination_folder_id"`
	Rename   string   `json:"rename,omitempty"`
}

// MoveFileResponse is the response structure of the corresponding request
type MoveFileResponse struct {
	Status  string   `json:"status"`
	Message string   `json:"message"`
	URLs    []string `json:"urls"`
}

// MoveDirRequest is the request structure of the corresponding request
type MoveDirRequest struct {
	FolderID            int    `json:"folder_id"`
	DestinationFolderID int    `json:"destination_folder_id,omitempty"`
	DestinationUser     string `json:"destination_user"`
	Rename              string `json:"rename,omitempty"`
}

// MoveDirResponse is the response structure of the corresponding request
type MoveDirResponse struct {
	Status  string `json:"status"`
	Message string `json:"message"`
	OldName string `json:"old_name"`
	NewName string `json:"new_name"`
}

// CopyFileRequest is the request structure of the corresponding request
type CopyFileRequest struct {
	URLs     []string `json:"urls"`
	FolderID int      `json:"folder_id"`
	Rename   string   `json:"rename,omitempty"`
}

// CopyFileResponse is the response structure of the corresponding request
type CopyFileResponse struct {
	Status  string     `json:"status"`
	Message string     `json:"message"`
	Copied  int        `json:"copied"`
	URLs    []FileCopy `json:"urls"`
}

// FileCopy is used in the CopyFileResponse
type FileCopy struct {
	FromURL string `json:"from_url"`
	ToURL   string `json:"to_url"`
}

// RenameFileURL is the data structure to rename a single file
type RenameFileURL struct {
	URL      string `json:"url"`
	Filename string `json:"filename"`
}

// RenameFileRequest is the request structure of the corresponding request
type RenameFileRequest struct {
	URLs   []RenameFileURL `json:"urls"`
	Pretty int             `json:"pretty"`
}

// RenameFileResponse is the response structure of the corresponding request
type RenameFileResponse struct {
	Status  string `json:"status"`
	Message string `json:"message"`
	Renamed int    `json:"renamed"`
	URLs    []struct {
		URL         string `json:"url"`
		OldFilename string `json:"old_filename"`
		NewFilename string `json:"new_filename"`
	} `json:"urls"`
}

// GetUploadNodeResponse is the response structure of the corresponding request
type GetUploadNodeResponse struct {
	ID  string `json:"id"`
	URL string `json:"url"`
}

// GetTokenResponse is the response structure of the corresponding request
type GetTokenResponse struct {
	URL     string `json:"url"`
	Status  string `json:"Status"`
	Message string `json:"Message"`
}

// SharedFolderResponse is the response structure of the corresponding request
type SharedFolderResponse []SharedFile

// SharedFile is the structure how 1Fichier returns a shared File
type SharedFile struct {
	Filename string `json:"filename"`
	Link     string `json:"link"`
	Size     int64  `json:"size"`
}

// EndFileUploadResponse is the response structure of the corresponding request
type EndFileUploadResponse struct {
	Incoming int `json:"incoming"`
	Links    []struct {
		Download  string `json:"download"`
		Filename  string `json:"filename"`
		Remove    string `json:"remove"`
		Size      string `json:"size"`
		Whirlpool string `json:"whirlpool"`
	} `json:"links"`
}

// File is the structure how 1Fichier returns a File
type File struct {
	CDN         int    `json:"cdn"`
	Checksum    string `json:"checksum"`
	ContentType string `json:"content-type"`
	Date        string `json:"date"`
	Filename    string `json:"filename"`
	Pass        int    `json:"pass"`
	Size        int64  `json:"size"`
	URL         string `json:"url"`
}

// FilesList is the structure how 1Fichier returns a list of files
type FilesList struct {
	Items  []File `json:"items"`
	Status string `json:"Status"`
}

// Folder is the structure how 1Fichier returns a Folder
type Folder struct {
	CreateDate string `json:"create_date"`
	ID         int    `json:"id"`
	Name       string `json:"name"`
	Pass       int    `json:"pass"`
}

// FoldersList is the structure how 1Fichier returns a list of Folders
type FoldersList struct {
	FolderID   int      `json:"folder_id"`
	Name       string   `json:"name"`
	Status     string   `json:"Status"`
	SubFolders []Folder `json:"sub_folders"`
}

// AccountInfo is the structure how 1Fichier returns user info
type AccountInfo struct {
	StatsDate               string `json:"stats_date"`
	MailRM                  string `json:"mail_rm"`
	DefaultQuota            int64  `json:"default_quota"`
	UploadForbidden         string `json:"upload_forbidden"`
	PageLimit               int    `json:"page_limit"`
	ColdStorage             int64  `json:"cold_storage"`
	Status                  string `json:"status"`
	UseCDN                  string `json:"use_cdn"`
	AvailableColdStorage    int64  `json:"available_cold_storage"`
	DefaultPort             string `json:"default_port"`
	DefaultDomain           int    `json:"default_domain"`
	Email                   string `json:"email"`
	DownloadMenu            string `json:"download_menu"`
	FTPDID                  int    `json:"ftp_did"`
	DefaultPortFiles        string `json:"default_port_files"`
	FTPReport               string `json:"ftp_report"`
	OverQuota               int64  `json:"overquota"`
	AvailableStorage        int64  `json:"available_storage"`
	CDN                     string `json:"cdn"`
	Offer                   string `json:"offer"`
	SubscriptionEnd         string `json:"subscription_end"`
	TFA                     string `json:"2fa"`
	AllowedColdStorage      int64  `json:"allowed_cold_storage"`
	HotStorage              int64  `json:"hot_storage"`
	DefaultColdStorageQuota int64  `json:"default_cold_storage_quota"`
	FTPMode                 string `json:"ftp_mode"`
	RUReport                string `json:"ru_report"`
}