// NNM-Club torrent files mass downloader
// Created for Uploaders group
// Copyright (c) 2012-2022 Vladimir "fat0troll" Hodakov

package fetcher

import (
	"net/http"

	"github.com/PuerkitoBio/goquery"
	"github.com/rs/zerolog"
	"gitlab.com/pztrn/flagger"

	"gitlab.com/fat0troll/uploader_tools/internal/context"
)

var (
	c                    *context.Context
	dclient              http.Client
	dlog                 zerolog.Logger
	forumPages           map[int]*goquery.Document
	forumPagesLinks      map[string]string
	forumTopics          map[int]*forumTopic
	forumTopicInProgress int
	outputDirPath        string
	totalLength          int64
	uberDebug            bool
)

// New initializes package
func New(cc *context.Context) {
	c = cc
	dlog = c.Logger.With().Str("модуль", "fetcher").Int("версия", 1).Logger()

	_ = c.Flagger.AddFlag(&flagger.Flag{
		Name:         "forum",
		Description:  "Номер форума, торренты с которого нужно скачать",
		Type:         "int",
		DefaultValue: 0,
	})

	_ = c.Flagger.AddFlag(&flagger.Flag{
		Name:         "fetcherDebug",
		Description:  "Запустить модуль fetcher в дебаг-режиме",
		Type:         "bool",
		DefaultValue: false,
	})

	_ = c.Flagger.AddFlag(&flagger.Flag{
		Name:         "outputDir",
		Description:  "Директория, в которую будут помещены скачанные торрент-файлы",
		Type:         "string",
		DefaultValue: "./",
	})

	forumPages = make(map[int]*goquery.Document)
	forumPagesLinks = make(map[string]string)
	forumTopics = make(map[int]*forumTopic)

	dlog.Info().Msg("Модуль инициализирован")
}

// Process handles authorization
func Process() {
	uberDebug, _ = c.Flagger.GetBoolValue("fetcherDebug")
	forumID, _ := c.Flagger.GetIntValue("forum")

	if forumID == 0 {
		dlog.Fatal().Msg("Номер форума не указан. Используйте ключ -forum XXX, чтобы указать номер форума")
	}

	outputDirPathPrefix, _ := c.Flagger.GetStringValue("outputDir")

	dlog.Info().Int("forum ID", forumID).Msg("Получен ID форума, начинаем работу...")

	createOutputDir(outputDirPathPrefix, forumID)
	fetch(forumID)
	printStats()
}