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)
	GetUserProfile(c *gin.Context)
	UpdateProfile(c *gin.Context)
	ChangePassword(c *gin.Context)
	ListTitles(c *gin.Context)
	GetActiveUsersForMention(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)
	
	// New methods
	GetPermissionsGrouped(c *gin.Context)
	CreateOrUpdateRole(c *gin.Context)
	GetRoleDetail(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 LetterOutgoingHandler interface {
	CreateOutgoingLetter(c *gin.Context)
	GetOutgoingLetter(c *gin.Context)
	ListOutgoingLetters(c *gin.Context)
	UpdateOutgoingLetter(c *gin.Context)
	DeleteOutgoingLetter(c *gin.Context)
	
	SubmitForApproval(c *gin.Context)
	ApproveOutgoingLetter(c *gin.Context)
	RejectOutgoingLetter(c *gin.Context)
	SendOutgoingLetter(c *gin.Context)
	ArchiveOutgoingLetter(c *gin.Context)
	
	AddRecipients(c *gin.Context)
	UpdateRecipient(c *gin.Context)
	RemoveRecipient(c *gin.Context)
	
	AddAttachments(c *gin.Context)
	RemoveAttachment(c *gin.Context)
	
	CreateDiscussion(c *gin.Context)
	UpdateDiscussion(c *gin.Context)
	DeleteDiscussion(c *gin.Context)
}

type AdminApprovalFlowHandler interface {
	CreateApprovalFlow(c *gin.Context)
	GetApprovalFlow(c *gin.Context)
	GetApprovalFlowByDepartment(c *gin.Context)
	UpdateApprovalFlow(c *gin.Context)
	DeleteApprovalFlow(c *gin.Context)
	ListApprovalFlows(c *gin.Context)
	ActivateApprovalFlow(c *gin.Context)
	DeactivateApprovalFlow(c *gin.Context)
	CloneApprovalFlow(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)
}
