package web

import (
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"

	"th7/ports"
)

type GinAdapter struct {
	router   *gin.Engine
	corePort ports.CorePort
}

func (g GinAdapter) registerEndpoints() {

	g.router.GET("/channels", func(c *gin.Context) {
		channels := g.corePort.GetChannels()
		c.JSON(http.StatusOK, channels)
	})

	g.router.GET("/channel/:id", func(c *gin.Context) {
		id, err := strconv.Atoi(c.Param("id"))
		if err != nil {
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err,
			})
			return
		}

		channel, err := g.corePort.GetChannel(id)
		if err != nil {
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err,
			})
			return
		}

		c.JSON(http.StatusOK, channel)

	})

}

func NewGinAdapter(corePort ports.CorePort) *GinAdapter {
	var adapter GinAdapter

	adapter.corePort = corePort

	adapter.router = gin.Default()
	adapter.registerEndpoints()

	return &adapter
}

func (g *GinAdapter) Run() {
	g.router.Run()
}