// Команда jellybit — связующий сервис qBittorrent ↔ Jellyfin.
//
// Подкоманды:
//
//	jellybit [serve] --config <path>      запустить сервис (по умолчанию)
//	jellybit add <magnet> [--context]     добавить загрузку через REST API сервиса
//	jellybit recognize <infohash> --dry-run  показать план распознавания (без записи)
//	jellybit healthcheck --config <p>     проверить /healthz (для docker HEALTHCHECK)
package main

import (
	"os"
	"strings"
	_ "time/tzdata" // встроенная база zoneinfo: general.timezone работает на любом хосте

	"git.vakhrushev.me/av/jellybit/internal/logging"
)

func main() {
	args := os.Args[1:]

	// Первый позиционный аргумент (не флаг) — подкоманда. Без него (и при
	// `--config ...`, как в Dockerfile ENTRYPOINT) запускаем сервис.
	cmd := "serve"
	if len(args) > 0 && !strings.HasPrefix(args[0], "-") {
		cmd, args = args[0], args[1:]
	}

	var err error
	switch cmd {
	case "serve":
		err = runServe(args)
	case "add":
		err = runAdd(args)
	case "recognize":
		err = runRecognize(args)
	case "healthcheck":
		err = runHealthcheck(args)
	default:
		_, _ = os.Stderr.WriteString("unknown command: " + cmd + "\n")
		os.Exit(2)
	}
	if err != nil {
		if cmd == "serve" {
			// Фатальный сбой старта сервиса — структурный лог ERROR (как в проде),
			// затем ненулевой код возврата.
			logging.NewStderr().Error("fatal startup", "command", cmd, "error", err)
		} else {
			// Диагностические CLI (add/recognize/healthcheck) — человекочитаемый
			// stderr, это пользовательский вывод, а не лог сервиса.
			_, _ = os.Stderr.WriteString("fatal: " + err.Error() + "\n")
		}
		os.Exit(1)
	}
}
