package tenant

import "time"

type (
	TenantRegion       string // @name tenant.TenantRegion
	TenantStatus       string // @name tenant.TenantStatus
	TenantKind         string // @name tenant.TenantKind
	TenantPlan         string // @name tenant.TenantPlan
	TenantSegmentation string // @name tenant.TenantSegmentation
)

const (
	TenantRegionAPAC      TenantRegion = "APAC"
	TenantRegionEMEA      TenantRegion = "EMEA"
	TenantRegionJapan     TenantRegion = "JAPAN"
	TenantRegionLATAM     TenantRegion = "LATAM"
	TenantRegionNA        TenantRegion = "NA"
	TenantRegionRDG       TenantRegion = "RDG"
	TenantRegionUnknown   TenantRegion = "UNKNOWN"
	TenantRegionTestInfra TenantRegion = "TEST_INFRA"

	TenantStatusPending  TenantStatus = "pending"
	TenantStatusActive   TenantStatus = "active"
	TenantStatusInactive TenantStatus = "inactive"
	TenantStatusDeleted  TenantStatus = "deleted"
	TenantStatusCleared  TenantStatus = "cleared"

	TenantKindInternal TenantKind = "internal"
	TenantKindExternal TenantKind = "external"

	TenantPlanNewUser   TenantPlan = "new_user"
	TenantPlanFreeTrial TenantPlan = "free_trial"
	TenantPlanPoc       TenantPlan = "poc"
	TenantPlanOnDemand  TenantPlan = "on_demand"

	TenantSegmentationSKA     TenantSegmentation = "SKA"
	TenantSegmentationKA      TenantSegmentation = "KA"
	TenantSegmentationSMB     TenantSegmentation = "SMB"
	TenantSegmentationUnknown TenantSegmentation = "UNKNOWN"
)

const AccountIDHeader = "X-ACCOUNT-USER-ID"
const RequestSource = "X-BILLING-REQUEST-SOURCE"
const RequestSourceOps = "ops"

// const NeedPermissionCheckHeader = "X-BILLING-NEED-PERMISSION-CHECK"

type Tenant struct {
	Id               uint64             `json:"id"`
	CreatedAt        *time.Time         `json:"created_at"`
	Name             string             `json:"name"`
	Alias            string             `json:"alias"`
	Email            string             `json:"email"`
	Country          string             `json:"country"`
	TimeZone         string             `json:"time_zone"`
	Status           TenantStatus       `json:"status"`
	Kind             TenantKind         `json:"kind"`
	SalesOwnerEmail  string             `json:"sales_owner_email"`
	Plan             TenantPlan         `json:"plan"`
	CountryRegion    TenantRegion       `json:"country_region"`
	CustomID         string             `json:"custom_id"`
	Segmentation     TenantSegmentation `json:"segmentation"`
	SalesForceRegion TenantRegion       `json:"sales_force_region"`
	SalesForceKind   TenantKind         `json:"sales_force_kind"`
	TAMName          string             `json:"tam_name"`
}

func (t *Tenant) GetTenantRegion() TenantRegion {
	if t.SalesForceRegion != "" {
		return t.SalesForceRegion
	}
	return t.CountryRegion
}

type MetricsQueryData struct {
	ResultType string                   `json:"resultType"`
	Result     []MetricsQueryDataResult `json:"result"`
}

type MetricsQueryDataResult struct {
	Metric map[string]string `json:"metric"`
	Values [][]interface{}   `json:"values"`
}
