package model

import (
	"database/sql"
	"time"

	"gorm.io/gorm"
)

type CloudBillingOverSea struct {
	ID                      uint64         `gorm:"primaryKey;autoIncrement:true" json:"id"`
	CreatedAt               time.Time      `gorm:"not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt               sql.NullTime   `gorm:"default:null" json:"updated_at,omitempty"`
	DeletedAt               gorm.DeletedAt `gorm:"default:null" json:"deleted_at,omitempty"`
	AccountID               string         `json:"account_id"`
	AccountName             string         `json:"account_name"`
	CloudProvider           string         `json:"cloud_provider"`
	InvoiceAmount           float64        `json:"invoice_amount"`
	BillingMonth            string         `json:"billing_month"`
	DTAZDiscount            float64        `json:"dtaz_discount"`
	AwsInvoiceExcludingDtaz float64        `json:"aws_invoice_excluding_dtaz"`
}

func (CloudBillingOverSea) TableName() string {
	return "cloud_billing_oversea"
}

type CloudBillingDomestic struct {
	ID                  uint64         `gorm:"primaryKey;autoIncrement:true" json:"id"`
	CreatedAt           time.Time      `gorm:"not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt           sql.NullTime   `gorm:"default:null" json:"updated_at,omitempty"`
	DeletedAt           gorm.DeletedAt `gorm:"default:null" json:"deleted_at,omitempty"`
	CloudProvider       string         `json:"cloud_provider"`
	BillingMonth        string         `json:"billing_month"`
	Project             string         `json:"project"`
	ResourceProductLine string         `json:"resource_product_line"`
	InvoiceAmount       float64        `json:"invoice_amount"`
}

func (CloudBillingDomestic) TableName() string {
	return "cloud_billing_domestic"
}

type CloudRevrecAccount struct {
	ID            uint64         `gorm:"primaryKey;autoIncrement:true" json:"id"`
	CreatedAt     time.Time      `gorm:"not null;default:CURRENT_TIMESTAMP" json:"created_at"`
	UpdatedAt     sql.NullTime   `gorm:"default:null" json:"updated_at,omitempty"`
	DeletedAt     gorm.DeletedAt `gorm:"default:null" json:"deleted_at,omitempty"`
	CloudProvider string         `json:"cloud_provider"`
	BillingMonth  string         `json:"billing_month"`
	OrgID         string         `json:"org_id"`
	AccountID     string         `json:"account_id"`
	OrderNumber   string         `json:"order_number"`
	AccountName   string         `json:"account_name"`
}

func (CloudRevrecAccount) TableName() string {
	return "cloud_revrec_account"
}

type CloudBillingList struct {
	CloudProvider string `json:"cloud_provider" form:"cloud_provider"`
	PageType      int    `json:"page_type" form:"page_type"`
	Month         string `json:"month" form:"month"`
	Page          int    `json:"page" form:"page"`
	PageSize      int    `json:"page_size" form:"page_size"`
}
