package live

import (
	"fmt"

	"cloud.o-forge.io/core/oc-lib/models/common/enum"
	"cloud.o-forge.io/core/oc-lib/models/utils"
	"cloud.o-forge.io/core/oc-lib/tools"
)

/*
* LiveStorage is a struct that represents a compute units in your datacenters
 */

type LiveStorage struct {
	AbstractLive

	StorageType   enum.StorageType `bson:"storage_type" json:"storage_type" default:"-1"`
	Source        string           `bson:"source,omitempty" json:"source,omitempty"` // Source is the source of the storage
	Path          string           `bson:"path,omitempty" json:"path,omitempty"`     // Path is the store folders in the source
	Local         bool             `bson:"local" json:"local"`
	SecurityLevel string           `bson:"security_level,omitempty" json:"security_level,omitempty"`
	SizeType      enum.StorageSize `bson:"size_type" json:"size_type" default:"0"`           // SizeType is the type of the storage size
	SizeGB        int64            `bson:"size,omitempty" json:"size,omitempty"`             // Size is the size of the storage
	Encryption    bool             `bson:"encryption,omitempty" json:"encryption,omitempty"` // Encryption is a flag that indicates if the storage is encrypted
	Redundancy    string           `bson:"redundancy,omitempty" json:"redundancy,omitempty"` // Redundancy is the redundancy of the storage
	Throughput    string           `bson:"throughput,omitempty" json:"throughput,omitempty"` // Throughput is the throughput of the storage
}

func (r *LiveStorage) IsCompatible(service map[string]interface{}) bool {
	fmt.Println("COMPARE <", r.StorageType.Compare(service["storage_type"]), ">")

	return r.StorageType.Compare(service["storage_type"])
}

func (d *LiveStorage) GetAccessor(request *tools.APIRequest) utils.Accessor {
	return NewAccessor[*LiveStorage](tools.LIVE_STORAGE, request) // Create a new instance of the accessor
}
