/*
 * Copyright (c) 2025-2026, Антон Аксенов
 * This file is part of iptvc project
 * MIT License: https://git.axenov.dev/IPTV/iptvc/src/branch/master/LICENSE
 */

package cmd

import (
	"axenov/iptv-checker/app"
	"axenov/iptv-checker/app/web"

	"github.com/spf13/cobra"
)

// serveCmd represents the serve command
var serveCmd = &cobra.Command{
	Use:   "serve",
	Short: "Start web interface",
	Long: `Start web interface for browsing IPTV playlists.
Use --check to enable background playlist checking.
Copyright (c) 2025, Антон Аксенов, MIT license.`,
	Run: func(cmd *cobra.Command, args []string) {
		app.Init()
		applyAppOverrides(cmd)
		applyCacheOverrides(cmd)
		applyCheckOverrides(cmd)
		app.InitCache()

		// CLI-флаги переопределяют конфиг, только если заданы явно.
		if cmd.Flags().Changed("port") {
			app.Config.Server.Port = app.Args.ServerPort
		}
		if cmd.Flags().Changed("host") {
			app.Config.Server.Host = app.Args.ServerHost
		}

		server := web.NewServer(app.Config, app.Cache)

		// запускаем фоновую проверку, если передан --check или включён check.startOnServe в конфиге
		if app.Args.NeedCheck || app.Config.Check.StartOnServe {
			opts := web.CheckOptions{
				Repeat: app.Args.RepeatCount,
				Random: app.Args.RandomCount,
			}
			go server.StartBackgroundChecker(opts)
		}

		server.Start()
	},
}

func init() {
	serveCmd.Flags().UintVarP(&app.Args.ServerPort, "port", "p", 8800, "port for web interface (overrides config.yml and env)")
	serveCmd.Flags().StringVar(&app.Args.ServerHost, "host", "", "host to bind web interface (overrides config.yml and env)")
	serveCmd.Flags().BoolVar(&app.Args.NeedCheck, "check", false, "enable background playlist checking")
	addCommonCheckFlags(serveCmd, 0)
	rootCmd.AddCommand(serveCmd)
}
