package schema

import (
	"database/sql/driver"
	"encoding/json"

	"gorm.io/gorm"
)

type TrafficFilter struct {
	Cidr        string `json:"cidr"`
	Description string `json:"description"`
}

type TrafficFilters struct {
	Cidrs []TrafficFilter `json:"cidrs"`
}

// Value marshal json
func (c TrafficFilters) Value() (driver.Value, error) {
	b, err := json.Marshal(c)
	return string(b), err
}

// Scan unmarshal json
func (c *TrafficFilters) Scan(input any) error {
	return json.Unmarshal(input.([]byte), c)
}

type ClusterCidr struct {
	gorm.Model

	ClusterID       uint64         `gorm:"index:cluster_group,unique"`
	WorkPoolID      uint64         `gorm:"index:cluster_group,unique"`
	DisablePublicLB bool           `gorm:"default:false"`
	Cidr            TrafficFilters `gorm:"type:JSON"`
}

type PrivateLinkEndpoint struct {
	gorm.Model

	TenantID         uint64  `gorm:"not null"`
	ProjectID        uint64  `gorm:"not null;index"`
	ClusterID        uint64  `gorm:"not null;index"`
	EndpointID       string  `gorm:"not null;type:VARCHAR(512);index"`
	EndpointType     string  `gorm:"type:ENUM('dbaas','customer');not null;default:'customer'"`
	CloudProvider    string  `gorm:"type:ENUM('aws','gcp','azure');not null;default:'aws'"`
	WorkPoolID       uint64  `gorm:"not null;index;default:0"`
	PrivateIpAddress *string `gorm:"type:VARCHAR(191)"`
}
