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"
)

type GetWorkspaceCuratedTimelineRequest struct {
	WorkspaceID     uint64 `json:"workspace_id" uri:"id"`
	IncludeDrafts   *bool  `json:"include_drafts" form:"include_drafts"`
	IncludeHidden   *bool  `json:"include_hidden" form:"include_hidden"`
	IncludeEvidence *bool  `json:"include_evidence" form:"include_evidence"`
	Order           string `json:"order" form:"order"`
}

type GetWorkspaceCuratedTimelineResponse struct {
	*baseapi.BaseResponse

	Entries []wsent.TimelineEntry `json:"entries"`
	Summary string                `json:"summary,omitempty"`
	// SummaryUpdatedAt is the latest summary generation or edit time in Unix seconds.
	SummaryUpdatedAt int64 `json:"summary_updated_at,omitempty" format:"int64"`
}

type UpdateWorkspaceTimelineSummaryRequest struct {
	Summary   string `json:"summary" binding:"required"`
	UpdatedBy string `json:"updated_by"`
}

type UpdateWorkspaceTimelineSummaryResponse struct {
	*baseapi.BaseResponse

	Summary string `json:"summary"`
}

type CreateWorkspaceTimelineEntryRequest struct {
	OccurredAt       string   `json:"occurred_at" binding:"required"`
	Title            string   `json:"title" binding:"required"`
	Details          string   `json:"details"`
	EventKind        string   `json:"event_kind"`
	Topic            string   `json:"topic"`
	Entities         []string `json:"entities"`
	MetadataJSON     string   `json:"metadata_json"`
	CreatedBy        string   `json:"created_by"`
	EvidenceIDs      []uint64 `json:"evidence_ids"`
	EvidenceRelation string   `json:"evidence_relation"`
}

type UpdateWorkspaceTimelineEntryRequest struct {
	OccurredAt   string   `json:"occurred_at"`
	Title        string   `json:"title"`
	Details      string   `json:"details"`
	EventKind    string   `json:"event_kind"`
	Topic        string   `json:"topic"`
	Entities     []string `json:"entities"`
	MetadataJSON string   `json:"metadata_json"`
	UpdatedBy    string   `json:"updated_by"`
	Version      uint64   `json:"version" binding:"required"`
}

type WorkspaceTimelineEntryResponse struct {
	*baseapi.BaseResponse

	Entry *wsent.TimelineEntry `json:"entry,omitempty"`
}

type GetWorkspaceTimelineEvidenceRequest struct {
	WorkspaceID uint64 `json:"workspace_id" uri:"id"`
	Source      string `json:"source" form:"source"`
	SourceType  string `json:"source_type" form:"source_type"`
	IssueKey    string `json:"issue_key" form:"issue_key"`
	Actor       string `json:"actor" form:"actor"`
	Start       string `json:"start" form:"start"`
	End         string `json:"end" form:"end"`
	Bound       *bool  `json:"bound" form:"bound"`
}

type GetWorkspaceTimelineEvidenceResponse struct {
	*baseapi.BaseResponse

	Evidence []wsent.TimelineEvidence `json:"evidence"`
}

type BindWorkspaceTimelineEvidenceRequest struct {
	EvidenceID uint64 `json:"evidence_id" binding:"required"`
	Relation   string `json:"relation"`
}

type BindWorkspaceTimelineEvidenceResponse struct {
	*baseapi.BaseResponse

	Binding *wsent.TimelineEntryEvidence `json:"binding,omitempty"`
}

type SyncWorkspaceTimelineResponse struct {
	*baseapi.BaseResponse

	WorkspaceID uint64 `json:"workspace_id"`
}
