package model

import (
	"database/sql"
	"time"
)

type Tenant struct {
	Id                        uint64
	Name                      string
	Alias                     string
	Email                     string
	Region                    string
	Plan                      string
	ThirdPartyAccountProvider string `gorm:"column:third_party_account_provider"`
}

type Cluster struct {
	TenantId   uint64 `gorm:"column:tenant_id"`
	TenantName string `gorm:"column:tenant_name"`
	Id         uint64
	Name       string
	Status     string
	Region     string
	CreatedAt  time.Time `gorm:"column:created_at"`
}

type Backup struct {
	TenantId   uint64 `gorm:"column:tenant_id"`
	TenantName string `gorm:"column:tenant_name"`
	ClusterId  uint64 `gorm:"column:cluster_id"`
	Id         uint64
	Status     string
	BsType     string `gorm:"column:schedule_type"`
	Region     string
	Message    string
}

type Restore struct {
	TenantId   uint64 `gorm:"column:tenant_id"`
	TenantName string `gorm:"column:tenant_name"`
	ClusterId  uint64 `gorm:"column:cluster_id"`
	Id         uint64
	Status     string
	Region     string
	Message    string
}

type Import struct {
	TenantId   uint64 `gorm:"column:tenant_id"`
	TenantName string `gorm:"column:tenant_name"`
	ClusterId  uint64 `gorm:"column:cluster_id"`
	Id         uint64
	Status     string
	Region     string
	Message    string
}

type ClusterScaling struct {
	TenantId   uint64 `gorm:"column:tenant_id"`
	TenantName string `gorm:"column:tenant_name"`
	ClusterId  uint64 `gorm:"column:cluster_id"`
	Id         uint64
	Status     string
	Region     string
	Message    string
	Type       string
}

type Timestamp struct {
	Timestamp time.Time `gorm:"column:ts;primaryKey"`
}

type FocusedCluster struct {
	TenantId      uint64         `gorm:"column:id"`
	TenantName    string         `gorm:"column:alias"`
	POCStatus     string         `gorm:"column:poc_status"`
	ClusterId     uint64         `gorm:"column:cluster_id"`
	MaxQPS        float64        `gorm:"column:max_qps"`
	QpsGt500Min   int            `gorm:"column:qpm_60"`
	PausedHour    float64        `gorm:"column:paused_hour"`
	PlanType      string         `gorm:"column:tenant_plan"`
	POCStartTime  time.Time      `gorm:"column:poc_starttime"`
	POCEndTime    time.Time      `gorm:"column:poc_endtime"`
	POCPresales   sql.NullString `gorm:"column:poc_presales"`
	POCEE         sql.NullString `gorm:"column:poc_ee"`
	ClusterStatus sql.NullString `gorm:"column:cluster_status"`
	Region        string         `gorm:"column:region"`
}

type ClusterInfo struct {
	MaxQPS int `gorm:"column:max_qps"`
}

type RegionOveride struct {
	TenantId uint64 `gorm:"column:tenant_id"`
	Region   string `gorm:"column:region"`
}

func (Tenant) TableName() string {
	return "tmp_tenants"
}

func (Cluster) TableName() string {
	return "tmp_clusters"
}

func (Backup) TableName() string {
	return "tmp_backups"
}

func (Restore) TableName() string {
	return "tmp_restores"
}

func (Import) TableName() string {
	return "tmp_imports"
}

func (ClusterScaling) TableName() string {
	return "tmp_scalings"
}

func (Timestamp) TableName() string {
	return "tmp_timestamps"
}

func (FocusedCluster) TableName() string {
	return "tmp_name_and_progress"
}

func (RegionOveride) TableName() string {
	return "tmp_real_region"
}
