package ticket

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

	tktapi "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/api/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"
)

// ListTickets lists ticket snapshots.
//
//	@Summary	List ticket snapshots
//	@Id			TicketsHandlerListTickets
//	@Tags		TicketsHandler
//	@Accept		json
//	@Produce	json
//	@Success	200		{object}	tktapi.ListTicketsResponse
//	@Failure	default	{object}	base.BaseResponse
//	@Router		/api/v1/ticketmanager/tickets [get]
func (h *TicketsHandler) ListTickets(c *gin.Context) {
	records, err := h.ticketService.ListTickets(c.Request.Context(), ticketsvcapi.ListTicketsParam{})
	if err != nil {
		apiutils.Fail(c, err)
		return
	}

	apiutils.Success(c, &tktapi.ListTicketsResponse{Tickets: records})
}

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

	apiutils.Success(c, &tktapi.GetTicketResponse{Ticket: record})
}
