package entity

import (
	"time"

	"github.com/tidbcloud/serverless-service/internal/config"
	"github.com/tidbcloud/serverless-service/internal/domain/constant"
)

type Upload struct {
	ID        string                `gorm:"primary_key;not null"`
	CreatedAt time.Time             `gorm:"created_at;type:TIMESTAMP;not null;<-:create"` // create and read only
	UpdatedAt *time.Time            `gorm:"updated_at;type:TIMESTAMP"`
	Status    constant.UploadStatus `gorm:"type:ENUM('created', 'canceled', 'completed', 'cleaned');not null"`

	Multipart   bool   `gorm:"multipart;not null"`
	AwsUploadID string `gorm:"aws_upload_id"`
	BucketKey   string `gorm:"bucket_key;not null"`

	TenantID      uint64 `gorm:"not null"`
	ClusterID     uint64 `gorm:"not null"`
	CloudProvider string `gorm:"column:cloud_provider;type:varchar(255);not null"`
	RegionName    string `gorm:"not null"`

	IDCompat uint64 `gorm:"id_compat;not null;auto_increment"`
}

func (u *Upload) GetCloudProvider() string {
	if u.CloudProvider == "" {
		return config.ProviderAWS
	}
	return u.CloudProvider
}
