package models

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

type RecordDiskModel struct {
	// request fields - required
	DiskId   types.Int64    `tfsdk:"disk_id"`
	ID       types.Int64    `tfsdk:"replica_disk_id"`
	Timeouts timeouts.Value `tfsdk:"timeouts"`

	// response fields
	ACL               types.String          `tfsdk:"acl"`
	AccountID         types.Int64           `tfsdk:"account_id"`
	AccountName       types.String          `tfsdk:"account_name"`
	Computes          types.List            `tfsdk:"computes"`
	CreatedTime       types.Int64           `tfsdk:"created_time"`
	DeletedTime       types.Int64           `tfsdk:"deleted_time"`
	DeviceName        types.String          `tfsdk:"devicename"`
	Description       types.String          `tfsdk:"desc"`
	DestructionTime   types.Int64           `tfsdk:"destruction_time"`
	GID               types.Int64           `tfsdk:"gid"`
	ImageID           types.Int64           `tfsdk:"image_id"`
	Images            types.List            `tfsdk:"images"`
	IOTune            DiskReplicationIOTune `tfsdk:"iotune"`
	Name              types.String          `tfsdk:"disk_name"`
	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"`
	Replication       *ItemReplicationModel `tfsdk:"replication"`
	ResID             types.String          `tfsdk:"res_id"`
	ResName           types.String          `tfsdk:"res_name"`
	Role              types.String          `tfsdk:"role"`
	SepType           types.String          `tfsdk:"sep_type"`
	SepID             types.Int64           `tfsdk:"sep_id"`
	Shareable         types.Bool            `tfsdk:"shareable"`
	SizeMax           types.Int64           `tfsdk:"size_max"`
	SizeUsed          types.Float64         `tfsdk:"size_used"`
	Snapshots         types.List            `tfsdk:"snapshots"`
	Status            types.String          `tfsdk:"status"`
	StatusReplication types.String          `tfsdk:"status_replication"`
	TechStatus        types.String          `tfsdk:"tech_status"`
	Type              types.String          `tfsdk:"type"`
	VMID              types.Int64           `tfsdk:"vmid"`
}

type DiskReplicationIOTune struct {
	ReadBytesSec     types.Int64 `tfsdk:"read_bytes_sec"`
	ReadBytesSecMax  types.Int64 `tfsdk:"read_bytes_sec_max"`
	ReadIOPSSec      types.Int64 `tfsdk:"read_iops_sec"`
	ReadIOPSSecMax   types.Int64 `tfsdk:"read_iops_sec_max"`
	SizeIOPSSec      types.Int64 `tfsdk:"size_iops_sec"`
	TotalBytesSec    types.Int64 `tfsdk:"total_bytes_sec"`
	TotalBytesSecMax types.Int64 `tfsdk:"total_bytes_sec_max"`
	TotalIOPSSec     types.Int64 `tfsdk:"total_iops_sec"`
	TotalIOPSSecMax  types.Int64 `tfsdk:"total_iops_sec_max"`
	WriteBytesSec    types.Int64 `tfsdk:"write_bytes_sec"`
	WriteBytesSecMax types.Int64 `tfsdk:"write_bytes_sec_max"`
	WriteIOPSSec     types.Int64 `tfsdk:"write_iops_sec"`
	WriteIOPSSecMax  types.Int64 `tfsdk:"write_iops_sec_max"`
}

type ItemReplicationModel struct {
	DiskID       types.Int64  `tfsdk:"disk_id"`
	PoolID       types.String `tfsdk:"pool_id"`
	Role         types.String `tfsdk:"role"`
	SelfVolumeID types.String `tfsdk:"self_volume_id"`
	StorageID    types.String `tfsdk:"storage_id"`
	VolumeID     types.String `tfsdk:"volume_id"`
}

type DiskReplicationItemSnapshot struct {
	GUID        types.String `tfsdk:"guid"`
	Label       types.String `tfsdk:"label"`
	ReferenceID types.String `tfsdk:"reference_id"`
	ResID       types.String `tfsdk:"res_id"`
	SnapSetGUID types.String `tfsdk:"snap_set_guid"`
	SnapSetTime types.Int64  `tfsdk:"snap_set_time"`
	TimeStamp   types.Int64  `tfsdk:"timestamp"`
}
