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

package fetcher

import (
	"strings"
	"time"

	"github.com/PuerkitoBio/goquery"
)

var (
	// I haven't found internal solution in stdlib
	russianMonths = map[string]string{
		"Янв": "Jan",
		"Фев": "Feb",
		"Мар": "Mar",
		"Апр": "Apr",
		"Май": "May",
		"Июн": "Jun",
		"Июл": "Jul",
		"Авг": "Aug",
		"Сен": "Sep",
		"Окт": "Oct",
		"Ноя": "Nov",
		"Дек": "Dec",
	}
)

// checkLoginness checks if downloaded page belongs to user
func checkLoginness(querier *goquery.Document) bool {
	authorized := false

	querier.Find(".mainmenu").Each(func(i int, sel *goquery.Selection) {
		if strings.Contains(sel.Text(), "Выход") {
			if strings.Contains(sel.Text(), c.Config.Username) {
				authorized = true
			}
		}
	})

	return authorized
}

func getDownloadLink(querier *goquery.Document) string {
	var downloadLink string

	querier.Find("a[rel=nofollow]").Each(func(i int, sel *goquery.Selection) {
		if strings.Contains(sel.Text(), "Скачать") {
			href, _ := sel.Attr("href")
			downloadLink = href
		}
	})

	return downloadLink
}

func getForumName(querier *goquery.Document) string {
	return querier.Find("h1").First().Text()
}

func getLastModeratedDate(querier *goquery.Document) string {
	var dateValue time.Time
	var err error

	haveDate := false

	querier.Find("table.btTbl td.genmed").Each(func(i int, sel *goquery.Selection) {
		if strings.Contains(sel.Text(), "модератором") {
			date := strings.TrimPrefix(sel.Text(), " Оформление проверено модератором ")
			// Fix russian months names
			for i := range russianMonths {
				date = strings.Replace(date, i, russianMonths[i], -1)
			}
			dateValue, err = time.Parse("02 Jan 2006 15:04:05", date)
			if err != nil {
				dlog.Error().Err(err).Str("строка поиска даты", sel.Text()).
					Msg("Не удалось получить дату проверки торрента")
			} else {
				haveDate = true
			}
		}
	})

	if !haveDate {
		return ""
	}

	return dateValue.Format("2006-01-02")
}

func getTopics(querier *goquery.Document) {
	querier.Find(".forumline tr").Each(func(i int, sel *goquery.Selection) {
		if strings.Contains(sel.Text(), "DL:") {
			link := sel.Find("h2 a")
			topicName := link.Text()
			href, _ := link.Attr("href")
			href = "https://" + c.Config.URL + "/forum/" + href
			if uberDebug {
				dlog.Debug().Str("название", topicName).Str("ссылка", href).Msg("Найден элемент для загрузки")
			}
			forumTopics[len(forumTopics)] = &forumTopic{
				Link: href,
				Name: topicName,
			}
		}
	})
}


func isForumPageEmpty(querier *goquery.Document) bool {
	isEmpty := false
	querier.Find(".forumline tr").Each(func(i int, sel *goquery.Selection) {
		if strings.Contains(sel.Text(), "В этом форуме пока нет сообщений") {
			isEmpty = true
		}
	})

	return isEmpty
}