package workspace

import (
	baseapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/base"
	wsent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/workspace"
)

// WorkspaceFilters are additional, intersecting filters for workspace queries.
type WorkspaceFilters struct {
	Owner           string                    `form:"owner" json:"owner"`
	OwnerExclude    []string                  `form:"owner_exclude" json:"owner_exclude"`
	OwnerAssigned   *bool                     `form:"owner_assigned" json:"owner_assigned"`
	SeverityIn      []wsent.WorkspaceSeverity `form:"severity_in" json:"severity_in" enums:"P1,P2,P3,P4"`
	TenantID        string                    `form:"tenant_id" json:"tenant_id"`
	StartedAtFrom   *int64                    `form:"started_at_from" json:"started_at_from"`
	StartedAtTo     *int64                    `form:"started_at_to" json:"started_at_to"`
	RecoveredAtFrom *int64                    `form:"recovered_at_from" json:"recovered_at_from"`
	RecoveredAtTo   *int64                    `form:"recovered_at_to" json:"recovered_at_to"`
	OpenAgeBucket   string                    `form:"open_age_bucket" json:"open_age_bucket" enums:"lt_24h,1_3d,3_7d,gte_7d,unknown"`
	AgeReferenceAt  *int64                    `form:"age_reference_at" json:"age_reference_at"`
	MissingDate     string                    `form:"missing_date" json:"missing_date" enums:"started_at,recovered_at"`
	Sort            string                    `form:"sort" json:"sort" enums:"started_at_desc,started_at_asc,severity_asc_started_at_asc"`
}

type GetOverviewRequest struct {
	StartDate  string                    `form:"start_date" json:"start_date"`
	EndDate    string                    `form:"end_date" json:"end_date"`
	Owner      string                    `form:"owner" json:"owner"`
	SeverityIn []wsent.WorkspaceSeverity `form:"severity_in" json:"severity_in" enums:"P1,P2,P3,P4"`
	Region     []string                  `form:"region" json:"region" enums:"APAC,EMEA,JAPAN,NA,LATAM,OTHERS"`
	TenantID   string                    `form:"tenant_id" json:"tenant_id"`
	Sections   []string                  `form:"sections" json:"sections" enums:"summary,comparison,volume,open_age,open_by_owner,review_counts,data_quality"`
}

type GetOverviewResponse struct {
	*baseapi.BaseResponse
	Overview *wsent.Overview `json:"overview"`
}
