package ticket

import (
	"github.com/gin-gonic/gin"

	tktapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/ticket-manager/ticket"
	tktent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/ticket"
	apiutils "github.com/tidbcloud/aisupport/packages/sdk-go/infra/apiserver/utils"
	ticketsvcapi "github.com/tidbcloud/aisupport/services/ticket-manager/internal/services/ticket/api"
)

// ListTimeline lists timeline events for a ticket.
//
//	@Summary	List ticket timeline events
//	@Id			TicketsHandlerListTimeline
//	@Tags		TicketsHandler
//	@Accept		json
//	@Produce	json
//	@Param		jiraIssueKey	path		string	true	"Jira issue key"
//	@Success	200				{object}	tktapi.GetTicketTimelineResponse
//	@Failure	default			{object}	base.BaseResponse
//	@Router		/api/v1/ticketmanager/tickets/{jiraIssueKey}/timeline [get]
func (h *TicketsHandler) ListTimeline(c *gin.Context) {
	record, err := h.ticketService.GetTicketByIssueKey(c.Request.Context(), c.Param("jiraIssueKey"))
	if err != nil {
		apiutils.Fail(c, err)
		return
	}

	events, err := h.ticketService.ListTimelineEvents(c.Request.Context(), ticketsvcapi.ListTimelineEventsParam{
		TicketID: &record.ID,
	})
	if err != nil {
		apiutils.Fail(c, err)
		return
	}

	apiutils.Success(c, &tktapi.GetTicketTimelineResponse{Events: timelineEventValues(events)})
}

func timelineEventValues(events []*tktent.TimelineEvent) []tktent.TimelineEvent {
	result := make([]tktent.TimelineEvent, 0, len(events))
	for _, event := range events {
		if event == nil {
			continue
		}
		result = append(result, *event)
	}
	return result
}
