package handler

import (
	"context"
	"fmt"
	"kontor-api-echo/pkg/schema"
	"log"
	"net/http"
	"time"

	"github.com/google/uuid"
	"github.com/labstack/echo/v4"
	"github.com/uptrace/bun"
)

func SetupMediaRoutes(api *echo.Group) {
	media := api.Group("/media")
	media.GET("/files", GetAllFiles)
	media.POST("/files", AddFile)
}

func GetAllFiles(c echo.Context) error {
	var files []schema.MediaFile
	var err error
	var db *bun.DB
	ctx := context.Background()

	db, err = schema.GetDatabase()
	if err != nil {
		log.Fatal(err)
	}
	err = db.NewSelect().Model(&files).Relation("MediaActorFiles").Scan(ctx)
	if err != nil {
		log.Fatal(err)
		return echo.ErrInternalServerError
	}

	return c.JSON(http.StatusOK, files)
}

type Link struct {
	URL string `json:"url"`
}

func AddFile(c echo.Context) error {
	var err error
	var db *bun.DB
	ctx := context.Background()
	link := new(Link)
	if err = c.Bind(link); err != nil {
		return err
	}
	log.Printf("URL %s has been sent", link)

	db, err = schema.GetDatabase()
	if err != nil {
		log.Fatal(err)
	}
	id := uuid.NewString()
	timestamp := time.Now()
	mediafile := &schema.MediaFile{ID: id, CreatedAt: timestamp, UpdatedAt: timestamp, WebLink: fmt.Sprintf("%s", link), Version: 1, ShouldDownload: true, Review: true}
	_, err = db.NewInsert().Model(mediafile).Exec(ctx)
	if err != nil {
		return err
	}
	return c.String(http.StatusCreated, "Link created")
}
