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

package app

import (
	"axenov/iptv-checker/app/cache"
	"axenov/iptv-checker/app/config"
	"axenov/iptv-checker/app/logger"

	"github.com/redis/go-redis/v9"
)

// Version информация, заполняется при сборке через ldflags
var (
	VERSION = "dev"
	COMMIT  = "unknown"
)

// Arguments описывает аргументы командной строки
type Arguments struct {
	IniPath     string
	TagsPath    string
	RandomCount uint
	RepeatCount uint
	NeedJson    bool
	NeedQuiet   bool
	Verbose     bool
	ServerPort  uint
	ServerHost  string
	ConfigPath  string
	NeedCheck   bool
	Files       []string
	Urls        []string
	Codes       []string

	// app
	Debug    bool
	LogLevel string

	// check.playlists
	PlTimeout     int
	PlAllCooldown int
	PlOneCooldown int
	PlMaxRoutines int
	PlPerRoutine  int
	PlUserAgent   []string

	// check.channels
	ChTimeout     int
	ChByteRange   int
	ChCooldown    int
	ChMaxRoutines int
	ChPerRoutine  int
	ChUserAgent   []string

	// cache
	CacheEnabled  bool
	CacheHost     string
	CachePort     uint
	CacheUsername string
	CachePassword string
	CacheDb       uint
	CacheTtl      uint
}

var (
	Args   Arguments
	Cache  *redis.Client
	Config *config.Config
)

// Init загружает конфигурацию и инициализирует логгер.
// CLI-override применяются через applyAppOverrides(), applyCacheOverrides()
// и applyCheckOverrides() в обработчиках команд после Init().
func Init() {
	Config = config.Init(Args.ConfigPath)
	logger.Init(Args.NeedQuiet)
}

// InitCache инициализирует подключение к кешу, если кеш включён.
// Вызывайте после применения всех cache-override.
func InitCache() {
	if Config.Cache.Enabled {
		Cache = cache.Init(&Config.Cache)
	}
}
