package controllers

import (
	"fmt"
	"oc-datacenter/infrastructure"
	"strconv"

	beego "github.com/beego/beego/v2/server/web"
)

type SessionController struct {
	beego.Controller
}

// @Title GetToken
// @Description find booking by id
// @Param	id	path 	string		"id of the datacenter"
// @Param	duration	path 	string		"duration of the token"
// @Success 200 {booking} models.booking
// @router /token/:id/:duration [get]
func (o *SessionController) GetToken() {
	id := o.Ctx.Input.Param(":id")
	durationSTR := o.Ctx.Input.Param(":duration")

	duration, err := strconv.Atoi(durationSTR)
	if err != nil {
		// change code to 400
		o.Ctx.Output.SetStatus(400)
		o.Data["json"] = map[string]string{"error": "duration invalid"}
		o.ServeJSON()
		return
	}

	serv, err := infrastructure.NewService()
	if err != nil {
		// change code to 500
		o.Ctx.Output.SetStatus(500)
		o.Data["json"] = map[string]string{"error": err.Error()}
		o.ServeJSON()
		return
	}
	fmt.Println("BLAPO", id, duration)
	token, err := serv.GenerateToken(o.Ctx.Request.Context(), id, duration)
	if err != nil {
		// change code to 500
		o.Ctx.Output.SetStatus(500)
		o.Data["json"] = map[string]string{"error": err.Error()}
		o.ServeJSON()
		return
	}
	o.Data["json"] = token
	o.ServeJSON()
}
