// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package image

import (
	"time"

	"yunion.io/x/onecloud/pkg/apis"
)

type ImageListInput struct {
	apis.SharableVirtualResourceListInput
	apis.MultiArchResourceBaseListInput

	// 以镜像的格式过滤，可能值为：qcow2, iso, vmdk, vhd, raw等
	DiskFormats []string `json:"disk_formats"`
	// 列出是否支持UEFI启动的镜像
	Uefi *bool `json:"uefi"`

	// 根据已转换格式过滤, 可能值为: qcow2, vmdk, vhd, raw等
	SubFormats []string `json:"subFormats"`

	// 是否为标准镜像
	IsStandard *bool `json:"is_standard"`

	// 是否删除保护
	Protected *bool `json:"protected"`

	// 是否为主机镜像的子镜像
	IsGuestImage *bool `json:"is_guest_image"`

	// 是否为数据盘
	IsData *bool `json:"is_data"`

	// 操作系统类型，可能值为: Linux, Windows, FreeBSD 等
	OsTypes []string `json:"os_types"`
	// 操作系统精确匹配
	OsTypePreciseMatch bool `json:"os_type_precise_match"`

	// 操作系统架构, 可能值为: arm, x86 等
	OsArchs []string `json:"os_archs"`
	// 操作系统架构精确匹配
	OsArchPreciseMatch bool `json:"os_arch_precise_match"`

	// 发行版本，可能值为: CentOS, Ubuntu, Debian, ArchLinux,  OpenEuler 等
	Distributions []string `json:"distributions"`
	// 发行版精确匹配
	DistributionPreciseMatch bool `json:"distribution_precise_match`
}

type GuestImageListInput struct {
	apis.SharableVirtualResourceListInput
	apis.MultiArchResourceBaseListInput

	// 是否删除保护
	Protected *bool `json:"protected"`

	DiskFormat []string `json:"disk_format"`
}

type ImageDetails struct {
	apis.SharableVirtualResourceDetails
	apis.EncryptedResourceDetails

	SImage

	// 镜像属性信息
	Properties map[string]string `json:"properties"`
	// 自动清除时间
	AutoDeleteAt time.Time `json:"auto_delete_at"`
	// 删除保护
	DisableDelete bool `json:"disable_delete"`
	//OssChecksum   string    `json:"oss_checksum"`
}

type ImageCreateInput struct {
	apis.SharableVirtualResourceCreateInput

	// 镜像大小, 单位Byte
	Size *int64 `json:"size"`
	// 镜像格式
	DiskFormat string `json:"disk_format"`
	// 最小系统盘要求
	MinDiskMB *int32 `json:"min_disk"`
	// 最小内存要求
	MinRamMB *int32 `json:"min_ram"`
	// 是否有删除保护
	Protected *bool `json:"protected"`
	// 是否是标准镜像
	IsStandard *bool `json:"is_standard"`
	// 是否是主机镜像
	IsGuestImage *bool `json:"is_guest_image"`
	// 是否是数据盘镜像
	IsData *bool `json:"is_data"`

	apis.EncryptedResourceCreateInput

	// 镜像属性
	Properties map[string]string `json:"properties"`
}

type ImageUpdateInput struct {
	apis.SharableVirtualResourceBaseUpdateInput

	// 最小系统盘要求
	MinDiskMB *int32 `json:"min_disk"`
	// 最小内存要求
	MinRamMB *int32 `json:"min_ram"`
	// 是否有删除保护
	Protected *bool `json:"protected"`
	// 是否是标准镜像
	IsStandard *bool `json:"is_standard"`

	// 是否是数据盘镜像
	IsData *bool `json:"is_data"`

	// 镜像属性
	Properties map[string]string `json:"properties"`
}

type ImageUpdateStatusInput struct {
	apis.Meta

	// 镜像状态
	Status string `json:"status"`
	// 更新镜像状态原因
	Reason string `json:"reason"`
}

type PerformProbeInput struct {
}
