package handlers

import (
	"ttime/internal/database"

	"github.com/gofiber/fiber/v2"
)

// The actual interface that we will use
type GlobalState interface {
	Register(c *fiber.Ctx) error        // To register a new user
	UserDelete(c *fiber.Ctx) error      // To delete a user
	Login(c *fiber.Ctx) error           // To get the token
	LoginRenew(c *fiber.Ctx) error      // To renew the token
	CreateProject(c *fiber.Ctx) error   // To create a new project
	GetUserProjects(c *fiber.Ctx) error // To get all projects
	SubmitWeeklyReport(c *fiber.Ctx) error
	GetWeeklyReport(c *fiber.Ctx) error
	SignReport(c *fiber.Ctx) error
	GetProject(c *fiber.Ctx) error
	AddUserToProjectHandler(c *fiber.Ctx) error
	PromoteToAdmin(c *fiber.Ctx) error
	GetWeeklyReportsUserHandler(c *fiber.Ctx) error
	IsProjectManagerHandler(c *fiber.Ctx) error
	DeleteProject(c *fiber.Ctx) error       // To delete a project // WIP
	ListAllUsers(c *fiber.Ctx) error        // To get a list of all users in the application database
	ListAllUsersProject(c *fiber.Ctx) error // To get a list of all users for a specific project
	ProjectRoleChange(c *fiber.Ctx) error   // To change a users role in a project
	ChangeUserName(c *fiber.Ctx) error      // WIP
	GetAllUsersProject(c *fiber.Ctx) error  // WIP
	UpdateWeeklyReport(c *fiber.Ctx) error
}

// "Constructor"
func NewGlobalState(db database.Database) GlobalState {
	return &GState{Db: db}
}

// The global state, which implements all the handlers
type GState struct {
	Db database.Database
}