package models

import (
	"github.com/hashicorp/terraform-plugin-framework-timeouts/datasource/timeouts"
	"github.com/hashicorp/terraform-plugin-framework/types"
)

type DataSourceDiskListModel struct {
	// request fields
	ByID        types.Int64    `tfsdk:"by_id"`
	Name        types.String   `tfsdk:"name"`
	AccountName types.String   `tfsdk:"account_name"`
	DiskMaxSize types.Int64    `tfsdk:"disk_max_size"`
	Status      types.String   `tfsdk:"status"`
	Shared      types.Bool     `tfsdk:"shared"`
	AccountID   types.Int64    `tfsdk:"account_id"`
	Type        types.String   `tfsdk:"type"`
	SEPID       types.Int64    `tfsdk:"sep_id"`
	PoolName    types.String   `tfsdk:"pool_name"`
	SortBy      types.String   `tfsdk:"sort_by"`
	Page        types.Int64    `tfsdk:"page"`
	Size        types.Int64    `tfsdk:"size"`
	Timeouts    timeouts.Value `tfsdk:"timeouts"`

	// response fields
	ID         types.String    `tfsdk:"id"`
	Items      []ItemDiskModel `tfsdk:"items"`
	EntryCount types.Int64     `tfsdk:"entry_count"`
}

type ItemDiskModel struct {
	AccountID       types.Int64   `tfsdk:"account_id"`
	AccountName     types.String  `tfsdk:"account_name"`
	ACL             types.String  `tfsdk:"acl"`
	Computes        types.List    `tfsdk:"computes"`
	CreatedBy       types.String  `tfsdk:"created_by"`
	CreatedTime     types.Int64   `tfsdk:"created_time"`
	DeletedBy       types.String  `tfsdk:"deleted_by"`
	DeletedTime     types.Int64   `tfsdk:"deleted_time"`
	Description     types.String  `tfsdk:"desc"`
	DestructionTime types.Int64   `tfsdk:"destruction_time"`
	DeviceName      types.String  `tfsdk:"devicename"`
	GID             types.Int64   `tfsdk:"gid"`
	ImageID         types.Int64   `tfsdk:"image_id"`
	Images          types.List    `tfsdk:"images"`
	IOTune          types.Object  `tfsdk:"iotune"`
	MachineID       types.Int64   `tfsdk:"machine_id"`
	MachineName     types.String  `tfsdk:"machine_name"`
	DiskId          types.Int64   `tfsdk:"disk_id"`
	DiskName        types.String  `tfsdk:"disk_name"`
	Milestones      types.Int64   `tfsdk:"milestones"`
	Order           types.Int64   `tfsdk:"order"`
	Params          types.String  `tfsdk:"params"`
	ParentID        types.Int64   `tfsdk:"parent_id"`
	PCISlot         types.Int64   `tfsdk:"pci_slot"`
	Pool            types.String  `tfsdk:"pool"`
	PresentTo       types.Map     `tfsdk:"present_to"`
	PurgeTime       types.Int64   `tfsdk:"purge_time"`
	ResID           types.String  `tfsdk:"res_id"`
	ResName         types.String  `tfsdk:"res_name"`
	Role            types.String  `tfsdk:"role"`
	SepID           types.Int64   `tfsdk:"sep_id"`
	SepType         types.String  `tfsdk:"sep_type"`
	Shareable       types.Bool    `tfsdk:"shareable"`
	SizeAvailable   types.Float64 `tfsdk:"size_available"`
	SizeMax         types.Int64   `tfsdk:"size_max"`
	SizeUsed        types.Float64 `tfsdk:"size_used"`
	Snapshots       types.List    `tfsdk:"snapshots"`
	Status          types.String  `tfsdk:"status"`
	TechStatus      types.String  `tfsdk:"tech_status"`
	Type            types.String  `tfsdk:"type"`
	UpdatedBy       types.String  `tfsdk:"updated_by"`
	UpdatedTime     types.Int64   `tfsdk:"updated_time"`
	VMID            types.Int64   `tfsdk:"vmid"`
}
