package main

import (
	"fmt"
	"log"
	"os"
	"os/exec"
	"path"
	"strings"

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

var rootPath string

func main() {
	rootPath = os.Getenv("APP_ROOT_PATH")
	if rootPath == "" {
		rootPath = "/app"
	}

	app := fiber.New()

	app.Post("ebook", handleEbook)

	log.Fatal(app.Listen(":80"))
}

func handleEbook(c *fiber.Ctx) error {

	f, err := c.FormFile("file")
	if err != nil {
		return c.Status(fiber.StatusBadRequest).SendString(fmt.Sprintf("error receiving file: %s", err))
	}

	sp := path.Join(rootPath, fmt.Sprintf("storage/%s.json", uuid.NewString()))

	err = c.SaveFile(f, sp)
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("failed to save file: %s", err))
	}

	cmd := exec.Command(path.Join(rootPath, "genpdf"), "generate:ebook", sp)

	o, err := cmd.Output()
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("failed to convert ebook: %s", err))
	}
	err = c.Download(strings.TrimSpace(string(o)))
	if err != nil {
		return c.Status(fiber.StatusInternalServerError).SendString(fmt.Sprintf("failed to sending ebook: %s", err))
	}

	return nil
}
