package main

import (
	"os"
	"os/exec"

	"git.milar.in/milarin/channel"
	"git.milar.in/nyaanime/logic"
	"github.com/fsnotify/fsnotify"
)

func main() {
	// check for ffprobe in PATH
	if _, err := exec.LookPath("ffprobe"); err != nil {
		panic(err) // TODO error handling
	}

	// get access token once at startup to be sure that an access token is obtainable at all
	if _, err := logic.GetAnilistAccessToken(); err != nil {
		panic(err) // TODO error handling
	}

	logic.PrintPriorityTables()

	fsChan, err := WatchDirectory(fsnotify.Create, DownloadPath)
	if err != nil {
		panic(err) // TODO error handling
	}

	outputChan := channel.MapWithRunner(fsChan, InitializeRunner(), HandleFile)
	channel.Each(outputChan, PrintByteChanFunc(os.Stdout))
}

func InitializeRunner() channel.Runner {
	if ThreadCount <= 0 {
		return channel.NewUnlimitedRunner()
	}
	return channel.NewLimitedRunner(ThreadCount)
}
