package types

import (
	"time"

	"github.com/tidbcloud/tiinf/sdk/auditlog"
)

type QueryAuditLogFilter struct {
	EventTypes          string                `json:"event_types" form:"event_types"`
	Result              auditlog.Result       `json:"result" form:"result"`
	StartedAt           int64                 `json:"started_at" form:"started_at"`
	EndedAt             int64                 `json:"ended_at" form:"ended_at"`
	OperatorType        auditlog.OperatorType `json:"operator_type" form:"operator_type"`
	OperatorID          uint64                `json:"operator_id" form:"operator_id"`
	OperatorEmail       string                `json:"operator_email" form:"operator_email"`
	OperatorIP          string                `json:"operator_ip" form:"operator_ip"`
	OperatorLoginMethod string                `json:"operator_login_method" form:"operator_login_method"`
	TraceID             string                `json:"trace_id" form:"trace_id"`
	OrgID               uint64                `json:"org_id,string" form:"org_id"`
	OrgName             string                `json:"org_name" form:"org_name"`
	ProjectID           uint64                `json:"project_id,string" form:"project_id"`
	ProjectName         string                `json:"project_name" form:"project_name"`
	ClusterID           uint64                `json:"cluster_id,string" form:"cluster_id"`
	ClusterName         string                `json:"cluster_name" form:"cluster_name"`
	Page                int                   `json:"page" form:"page"`
	PerPage             int                   `json:"per_page" form:"per_page"`
	ClusterType         string                `json:"cluster_type" form:"cluster_type"`
	Search              string                `json:"search" form:"search"`
	PrevID              int64                 `json:"prev_id" form:"prev_id"`
	OpenApiQuery        bool                  `json:"open_api_query" form:"open_api_query"`
	AscOrder            bool                  `json:"asc_order" form:"asc_order"`
}

type ExportAuditLogReq struct {
	QueryAuditLogFilter

	Format string `json:"format" form:"format"`
}

type ExportEvent struct {
	Type                string    `json:"type,omitempty" gorm:"index"`
	EndsAt              time.Time `json:"ends_at,omitempty" gorm:"index"`
	OperatorType        string    `json:"operator_type,omitempty"`
	OperatorID          uint64    `json:"operator_id,string,omitempty"`
	OperatorEmail       string    `json:"operator_email,omitempty"`
	OperatorIP          string    `json:"operator_ip,omitempty"`
	OperatorLoginMethod string    `json:"operator_login_method,omitempty"`
	OrgID               uint64    `json:"org_id,string,omitempty" gorm:"index"`
	OrgName             string    `json:"org_name,omitempty"`
	ProjectID           uint64    `json:"project_id,omitempty,string"`
	ProjectName         string    `json:"project_name,omitempty"`
	ClusterID           uint64    `json:"cluster_id,omitempty,string"`
	ClusterType         string    `json:"cluster_type,omitempty"`
	ClusterName         string    `json:"cluster_name,omitempty"`
	TraceID             string    `json:"trace_id,omitempty"`
	Result              string    `json:"result,omitempty"`
	Details             string    `json:"details,omitempty"`
}

type QueryAuditLogResp struct {
	Events     []ExportEvent `json:"events"`
	TotalCount int64         `json:"total_count"`
}

type ExportAuditLogResp struct {
	Records []ExportEvent `json:"records"`
}

type EventTypesResp struct {
	EventTypes map[auditlog.EventType]string `json:"event_types"`
}

type QuerySettingsResp struct {
	Status int `json:"status"`
}

type UpdateSettingsReq struct {
	Status int `json:"status"`
}
