package teamworkflow

import (
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	"github.com/tidbcloud/AgentTeam/internal/workflow/planmanage"
)

func itemResponse(value Item) dto.TeamWorkflowResponse {
	response := dto.TeamWorkflowResponse{
		ID:              value.ID,
		TeamID:          value.TeamID,
		Revision:        value.Revision,
		Status:          value.Status,
		AuthoringStatus: value.AuthoringStatus,
		Availability:    value.Availability,
		Actions: dto.TeamWorkflowActionsResponse{
			CanOpen: value.Actions.CanOpen, CanRetry: value.Actions.CanRetry,
			CanArchive: value.Actions.CanArchive, CanRestore: value.Actions.CanRestore,
			CanDelete: value.Actions.CanDelete,
		},
		CreatedAt: value.CreatedAt,
		UpdatedAt: value.UpdatedAt,
	}
	if value.Plan != nil {
		plan := planResponse(*value.Plan)
		response.Plan = &plan
	}
	if value.AuthoringStatus == "failed" && value.Failure != nil {
		response.Error = &dto.TeamWorkflowErrorResponse{Code: value.Failure.Code, Message: value.Failure.Message}
	}
	return response
}

func planResponse(value planmanage.Plan) dto.WorkflowPlanResponse {
	response := dto.WorkflowPlanResponse{
		ID:            value.ID,
		Key:           value.Key,
		DisplayName:   value.DisplayName,
		DescriptionMD: value.DescriptionMD,
		State:         string(value.State),
		Revision:      value.Revision,
		CreatedBy:     planActorResponse(value.CreatedBy),
		CreatedAt:     value.CreatedAt,
		UpdatedBy:     planActorResponse(value.UpdatedBy),
		UpdatedAt:     value.UpdatedAt,
		ArchivedAt:    value.ArchivedAt,
	}
	if value.CurrentVersion != nil {
		response.CurrentVersion = &dto.WorkflowPlanVersionRefResponse{ID: value.CurrentVersion.ID}
	}
	if value.DefaultVersion != nil {
		response.DefaultVersion = &dto.WorkflowPlanVersionRefResponse{ID: value.DefaultVersion.ID}
	}
	if value.ArchivedBy != nil {
		archivedBy := planActorResponse(*value.ArchivedBy)
		response.ArchivedBy = &archivedBy
	}
	return response
}

func planActorResponse(value planmanage.Actor) dto.WorkflowPlanActorResponse {
	return dto.WorkflowPlanActorResponse{Type: value.Type, ID: value.ID, MemberID: value.MemberID}
}
