package main

import (
	"fmt"
	"os/exec"
	"time"
)

func ConvertToPDF(folderPath string, filesPaths []string, contType ContentType) (resultingPath string, error error) {
	switch contType {
	case Images:
		return ImagesToPDF(folderPath, filesPaths)
	case Office:
		return OfficeToPDF(folderPath, filesPaths)
	default:
		return "", fmt.Errorf("Unhandled ContentType with %d index", contType)
	}
}

func ImagesToPDF(folderPath string, filesPaths []string) (resultingPath string, error error) {
	resultingPath = createResultingPath(folderPath, "Images")

	if err := runCommand("convert", append(filesPaths, resultingPath)...); err != nil {
		return "", err
	}

	return resultingPath, nil
}

func OfficeToPDF(folderPath string, filesPaths []string) (resultingPath string, error error) {
	resultingPath = createResultingPath(folderPath, "Office document")

	err := runCommand(
		"soffice", "--headless", "--nologo", "--nofirststartwizard",
		"--norestore", "--convert-to", "pdf", "--outdir", folderPath, filesPaths[0],
	)
	if err != nil {
		return "", err
	}

	err = runCommand("mv", folderPath + "/" + "0.pdf", resultingPath)
	if err != nil {
		return "", err
	}

	return resultingPath, nil
}

func createResultingPath(folderPath string, suffix string) string {
	return folderPath + "/" + time.Now().Format(time.ANSIC) + " " + suffix + ".pdf"
}

func runCommand(command string, arg ...string) error {
	cmd := exec.Command(command, arg...)

	if err := cmd.Run(); err != nil {
		return err
	}

	return nil
}