package v1

import (
	"database/sql"
	"time"

	"gorm.io/plugin/soft_delete"
)

const TableNameCloudResourceBudget = "cloud_resource_budget"

// CloudResourceBudget mapped from table <cloud_resource_budget>.
type CloudResourceBudget struct {
	ID         uint64                `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
	CreatedAt  time.Time             `gorm:"column:createdAt" json:"createdAt"`
	UpdatedAt  sql.NullTime          `gorm:"column:updatedAt" json:"updatedAt"`
	DeletedAt  sql.NullTime          `gorm:"column:deletedAt" json:"deletedAt"`
	ResourceID uint64                `gorm:"column:resourceID;not null" json:"resourceID"`
	Amount     float64               `gorm:"column:amount" json:"amount"` // positive for add, negative  for decline
	Month      string                `gorm:"column:month" json:"month"`   // format: YYYY-MM, eg. 2022-08
	IsDel      soft_delete.DeletedAt `json:"isDel" gorm:"column:isDel;softDelete:flag,DeletedAtField:DeletedAt"`
}

// TableName CloudResourceBudget's table name.
func (*CloudResourceBudget) TableName() string {
	return TableNameCloudResourceBudget
}

type BudgetWithDate struct {
	DateStr string  `json:"dateStr" gorm:"column:dateStr"`
	Budget  float64 `json:"budget" gorm:"column:budget"`
}

type BudgetCalcItem struct {
	Month  string  `json:"month" gorm:"column:month"`
	Amount float64 `json:"amount" gorm:"column:amount"`
}

type SetBudgetBodyItem struct {
	Month  string  `json:"month"`
	Before float64 `json:"before"`
	After  float64 `json:"after"`
}

type SetBudgetBody struct {
	// 1 for new, 2 for change
	BudgetType   int                 `json:"budgetType"`
	ManagementID string              `json:"managementId"`
	Items        []SetBudgetBodyItem `json:"items"`
}
