package main

import (
	"context"
	"flag"
	"github.com/sirrobot01/decypharr/cmd/decypharr"
	"github.com/sirrobot01/decypharr/internal/config"
	"github.com/sirrobot01/decypharr/pkg/version"
	"log"
	"net/http"
	_ "net/http/pprof" // registers pprof handlers
	"os"
	"os/signal"
	"runtime/debug"
	"syscall"
)

func main() {
	defer func() {
		if r := recover(); r != nil {
			log.Printf("FATAL: Recovered from panic in main: %v\n", r)
			debug.PrintStack()
		}
	}()

	if version.GetInfo().Channel == "dev" {
		log.Println("Running in dev mode")
		go func() {
			if err := http.ListenAndServe(":6060", nil); err != nil {
				log.Fatalf("pprof server failed: %v", err)
			}
		}()
	}
	var configPath string
	flag.StringVar(&configPath, "config", "/data", "path to the data folder")
	flag.Parse()
	config.SetConfigPath(configPath)
	config.Get()

	// Create a context that's cancelled on SIGINT/SIGTERM
	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
	defer stop()

	if err := decypharr.Start(ctx); err != nil {
		log.Fatal(err)
	}
}
