using HtmlAgilityPack;
using MangaReader.Core.Sources.NatoManga.Metadata;
using Shouldly;

namespace MangaReader.Tests.WebCrawlers.NatoManga;

public class NatoMangaWebCrawlerTests
{
    class TestNatoMangaWebCrawler : NatoMangaWebCrawler
    {
        protected override Task<HtmlDocument> GetHtmlDocumentAsync(string url, CancellationToken cancellationToken)
        {
            HtmlWeb web = new()
            {
                UsingCacheIfExists = false
            };

            return Task.FromResult(web.Load(url));
        }
    }

    [Fact]
    public async Task Get_Manga()
    {
        string sampleFilePath = Path.Combine(AppContext.BaseDirectory, "WebCrawlers", "NatoManga", "SampleMangaPage.html");

        var webCrawler = new TestNatoMangaWebCrawler();
        var manga = await webCrawler.GetMangaAsync(sampleFilePath, CancellationToken.None);

        manga.ShouldNotBeNull();

        manga.Title.ShouldBe("Gal Can’t Be Kind to Otaku!?");

        //manga.AlternateTitles.ShouldBe([
        //    "Kaette kudasai! Akutsu-san",
        //    "Yankee Musume",
        //    "ヤンキー娘",
        //    "帰ってください！ 阿久津さん"]);

        //manga.Authors.ShouldBe(["Nagaoka Taichi"]);
        //manga.Status.ShouldBe(MangaStatus.Ongoing);
        manga.Genres.ShouldBe(["Comedy", "Harem", "Romance", "School life", "Seinen", "Slice of life"]);
        //manga.UpdateDate.ShouldBe(new DateTime(2024, 9, 26, 0, 12, 0));
        //manga.Views.ShouldBe(93_300_000);
        //manga.RatingPercent.ShouldBe(97);
        //manga.Votes.ShouldBe(15979);

        ////manga.Description.ShouldStartWith("Ooyama-kun normally doesn’t get involved with Akutsu-san, a delinquent girl in his class");
        //manga.Description.ShouldStartWith("Ooyama-kun normally doesn’t get involved with Akutsu-san, a delinquent girl in his class");
        //manga.Description.ShouldEndWith("Artist's Pixiv: https://www.pixiv.net/member.php?id=133935");

        manga.Chapters.Count.ShouldBe(83);

        manga.Chapters[0].Url.ShouldBe("https://www.natomanga.com/manga/gal-cant-be-kind-to-otaku/chapter-69");
        manga.Chapters[0].Number.ShouldBe(69);
        manga.Chapters[0].Title.ShouldBe("Chapter 69");
        manga.Chapters[0].Views.ShouldBe(8146);
        //manga.Chapters[0].UploadDate.ShouldBe(new DateTime(2025, 4, 23, 17, 17, 0));

        //manga.Chapters[235].URL.ShouldBe("https://chapmanganato.to/manga-hf984788/chapter-0.1");
        //manga.Chapters[235].Number.ShouldBe(0.1f);
        //manga.Chapters[235].Title.ShouldBe("Vol.0 Chapter : Oneshot");
        //manga.Chapters[235].Views.ShouldBe(232_200);
        //manga.Chapters[235].UploadDate.ShouldBe(new DateTime(2021, 8, 24, 1, 8, 0));
    }
}