package repo

import (
	"github.com/tidbcloud/devops/entity"
	"github.com/tidbcloud/devops/pkg/infra/utils/repoopt"
)

var (
	RemediationTicketOpts              iOpts
	RemediationTicketPhaseApprovalOpts aOpts
)

type iOpts struct{}

func (_ iOpts) WithPager(page int, perPage int) repoopt.Option {
	pager := &repoopt.Pager{
		Page:    page,
		PerPage: perPage,
	}

	order := &repoopt.Order{
		Column: "created_at",
		Desc:   true,
	}
	return repoopt.Aggregate(pager, order)
}

func (_ iOpts) PhaseIs(phase entity.RemediationTicketPhase) repoopt.Option {
	return &repoopt.Filter[entity.RemediationTicketPhase]{
		Column: "phase",
		Value:  &phase,
	}
}

func (_ iOpts) StatusIn(statuses []entity.RemediationTicketStatus) repoopt.Option {
	return &repoopt.Filter[entity.RemediationTicketStatus]{
		Column: "status",
		Values: statuses,
	}
}

func (_ iOpts) StatusIs(status entity.RemediationTicketStatus) repoopt.Option {
	return &repoopt.Filter[entity.RemediationTicketStatus]{
		Column: "status",
		Value:  &status,
	}
}

type aOpts struct{}

func (_ aOpts) ApprovalIDIs(apprID uint64) repoopt.Option {
	return &repoopt.Filter[uint64]{
		Column: "approval_id",
		Value:  &apprID,
	}
}

func (_ aOpts) TicketIDIs(ticketID uint64) repoopt.Option {
	return &repoopt.Filter[uint64]{
		Column: "ticket_id",
		Value:  &ticketID,
	}
}
