package router

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

type HealthHandler interface {
	HealthCheck(c *gin.Context)
}

type UserHandler interface {
	ListUsers(c *gin.Context)
	GetProfile(c *gin.Context)
	UpdateProfile(c *gin.Context)
	ChangePassword(c *gin.Context)
	ListTitles(c *gin.Context)
	GetActiveUsersForMention(c *gin.Context)
	BulkCreateUsers(c *gin.Context)
	BulkCreateUsersAsync(c *gin.Context)
	GetBulkJobStatus(c *gin.Context)
}

type FileHandler interface {
	UploadProfileAvatar(c *gin.Context)
	UploadDocument(c *gin.Context)
}

type RBACHandler interface {
	CreatePermission(c *gin.Context)
	UpdatePermission(c *gin.Context)
	DeletePermission(c *gin.Context)
	ListPermissions(c *gin.Context)

	CreateRole(c *gin.Context)
	UpdateRole(c *gin.Context)
	DeleteRole(c *gin.Context)
	ListRoles(c *gin.Context)
}

type MasterHandler interface {
	// labels
	CreateLabel(c *gin.Context)
	UpdateLabel(c *gin.Context)
	DeleteLabel(c *gin.Context)
	ListLabels(c *gin.Context)
	// priorities
	CreatePriority(c *gin.Context)
	UpdatePriority(c *gin.Context)
	DeletePriority(c *gin.Context)
	ListPriorities(c *gin.Context)
	// institutions
	CreateInstitution(c *gin.Context)
	UpdateInstitution(c *gin.Context)
	DeleteInstitution(c *gin.Context)
	ListInstitutions(c *gin.Context)
	// disposition actions
	CreateDispositionAction(c *gin.Context)
	UpdateDispositionAction(c *gin.Context)
	DeleteDispositionAction(c *gin.Context)
	ListDispositionActions(c *gin.Context)
}

type LetterHandler interface {
	CreateIncomingLetter(c *gin.Context)
	GetIncomingLetter(c *gin.Context)
	ListIncomingLetters(c *gin.Context)
	UpdateIncomingLetter(c *gin.Context)
	DeleteIncomingLetter(c *gin.Context)

	CreateDispositions(c *gin.Context)
	//ListDispositionsByLetter(c *gin.Context)
	GetEnhancedDispositionsByLetter(c *gin.Context)

	CreateDiscussion(c *gin.Context)
	UpdateDiscussion(c *gin.Context)
}

type DispositionRouteHandler interface {
	Create(c *gin.Context)
	Update(c *gin.Context)
	Get(c *gin.Context)
	ListByFromDept(c *gin.Context)
	SetActive(c *gin.Context)
}

type VoteEventHandler interface {
	CreateVoteEvent(c *gin.Context)
	GetVoteEvent(c *gin.Context)
	GetActiveEvents(c *gin.Context)
	ListVoteEvents(c *gin.Context)
	UpdateVoteEvent(c *gin.Context)
	DeleteVoteEvent(c *gin.Context)
	CreateCandidate(c *gin.Context)
	SubmitVote(c *gin.Context)
	GetVoteResults(c *gin.Context)
	CheckVoteStatus(c *gin.Context)
	GetCandidates(c *gin.Context)
}
