package models

import (
	"encoding/json"
	"time"

	"github.com/google/uuid"
	"github.com/uptrace/bun"
)

type Cluster struct {
	bun.BaseModel `bun:"table:cluster_clusters,alias:cluster"`

	ID                 uuid.UUID       `bun:"id,pk,type:uuid,default:uuid_generate_v4()"`
	OrganizationId     uuid.UUID       `bun:"organization_id,type:uuid"`
	PartnerId          uuid.UUID       `bun:"partner_id,type:uuid"`
	ProjectId          uuid.UUID       `bun:"project_id,type:uuid"`
	MetroId            uuid.UUID       `bun:"metro_id,type:uuid"`
	Name               string          `bun:"name,notnull"`
	DisplayName        string          `bun:"display_name,notnull"`
	CreatedAt          time.Time       `bun:"created_at,notnull,default:current_timestamp"`
	ModifiedAt         time.Time       `bun:"modified_at,default:current_timestamp"`
	DeletedAt          time.Time       `bun:"deleted_at"`
	Trash              bool            `bun:"trash,notnull,default:false"`
	Labels             json.RawMessage `bun:"labels,type:jsonb,notnull,default:'{}'"`
	Annotations        json.RawMessage `bun:"annotations,type:jsonb,notnull,default:'{}'"`
	BlueprintRef       string          `bun:"blueprint_ref,notnull,default:''"`
	ClusterType        string          `bun:"cluster_type"`
	OverrideSelector   string          `bun:"override_selector,notnull,default:''"`
	Token              string          `bun:"token"`
	Conditions         json.RawMessage `bun:"conditions,type:jsonb,notnull,default:'{}'"`
	PublishedBlueprint string          `bun:"published_blueprint,notnull,default:''"`
	SystemTaskCount    int64           `bun:"system_task_count,notnull,default:0"`
	CustomTaskCount    int64           `bun:"custom_task_count,notnull,default:0"`
	AuxiliaryTaskCount int64           `bun:"auxiliary_task_count,notnull,default:0"`
	Extra              json.RawMessage `bun:"extra,type:jsonb,notnull,default:'{}'"`
	ShareMode          string          `bun:"share_mode,default:'CUSTOM'"`
	ProxyConfig        json.RawMessage `bun:"proxy_config,type:jsonb"`
}
