package server

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"

	"github.com/labstack/echo/v4"
	"github.com/labstack/gommon/log"

	"github.com/rjNemo/rentease/internal/service/booking"
)

func handleSync(bs *booking.Service) echo.HandlerFunc {
	type BookingInfo struct {
		Content string `json:"content"`
	}

	return func(c echo.Context) error {
		log.Info("received booking sync request from booking")
		x := c.Request().Body
		body, err := io.ReadAll(x)
		if err != nil {
			return c.String(http.StatusInternalServerError, err.Error())
		}

		bookingInfo := new(BookingInfo)
		err = json.Unmarshal(body, bookingInfo)
		if err != nil {
			return c.String(http.StatusInternalServerError, fmt.Sprintf("error unmarshalling JSON: %s", err))
		}

		b, err := bs.ParseFromApi(bookingInfo.Content)
		if err != nil {
			return c.String(http.StatusInternalServerError, err.Error())
		}
		log.Infof("created booking %q from %q", b.Name, b.Platform)

		return c.JSON(http.StatusCreated, "👍")
	}
}
