using JSMR.Domain.Enums;
using JSMR.Infrastructure.Data;
using Microsoft.EntityFrameworkCore;

namespace JSMR.Tests.Data.Repositories.VoiceWorks;

public static class VoiceWorkRepositorySeedData
{
    public static async Task SeedAsync(AppDbContext context)
    {
        if (await context.VoiceWorks.AnyAsync())
            return;

        context.Circles.AddRange(
            new() { CircleId = 1, Name = "Good Dreams", MakerId = "RG00001" },
            new() { CircleId = 2, Name = "Sweet Dreams", Favorite = true, MakerId = "RG00002" },
            new() { CircleId = 3, Name = "Nightmare Fuel", Blacklisted = true, MakerId = "RG00003" },
            new() { CircleId = 4, Name = "Never Again", Spam = true, MakerId = "RG00004" }
        );

        context.VoiceWorks.AddRange(
            new() { VoiceWorkId = 1, CircleId = 1, ProductId = "RJ0000001", ProductName = "Today Sounds", Description = "An average product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 1), Downloads = 500, WishlistCount = 750, StarRating = 35, IsValid = true },
            new() { VoiceWorkId = 2, CircleId = 2, ProductId = "RJ0000002", ProductName = "Super Comfy ASMR", Description = "An amazing product!", Status = (byte)VoiceWorkStatus.NewRelease, SalesDate = new(2025, 1, 3), Downloads = 5000, WishlistCount = 12000, StarRating = 50, Favorite = true, IsValid = true },
            new() { VoiceWorkId = 3, CircleId = 3, ProductId = "RJ0000003", ProductName = "Low Effort", Description = "A bad product.", Status = (byte)VoiceWorkStatus.Available, SalesDate = new(2025, 1, 2), Downloads = 50, WishlistCount = 100, StarRating = 20, IsValid = false },
            new() { VoiceWorkId = 4, CircleId = 1, ProductId = "RJ0000004", ProductName = "Tomorrow Sounds", Description = "A average upcoming product.", Status = (byte)VoiceWorkStatus.Upcoming, ExpectedDate = new(2025, 1, 1), WishlistCount = 300, IsValid = true },
            new() { VoiceWorkId = 5, CircleId = 2, ProductId = "RJ0000005", ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!", Status = (byte)VoiceWorkStatus.NewAndUpcoming, ExpectedDate = new(2025, 1, 11), WishlistCount = 10000, IsValid = true }
        );

        context.Creators.AddRange(
            new() { CreatorId = 1, Name = "Average Creator" },
            new() { CreatorId = 2, Name = "Good Creator" },
            new() { CreatorId = 3, Name = "Bad Creator" }
        );

        context.VoiceWorkCreators.AddRange(
            new() { VoiceWorkId = 1, CreatorId = 1 },
            new() { VoiceWorkId = 2, CreatorId = 2 },
            new() { VoiceWorkId = 3, CreatorId = 3 }
        );

        context.Tags.AddRange(
            new() { TagId = 1, Name = "ASMR" },
            new() { TagId = 2, Name = "Tsundere" },
            new() { TagId = 3, Name = "Office Lady" }
        );

        context.VoiceWorkTags.AddRange(
            new() { VoiceWorkId = 1, TagId = 1 },
            new() { VoiceWorkId = 2, TagId = 2 },
            new() { VoiceWorkId = 3, TagId = 3 }
        );

        context.VoiceWorkSupportedLanguages.AddRange(
            new() { VoiceWorkSupportedLanguageId = 1, VoiceWorkId = 1, Language = "JPN" },
            new() { VoiceWorkSupportedLanguageId = 2, VoiceWorkId = 2, Language = "JPN" },
            new() { VoiceWorkSupportedLanguageId = 3, VoiceWorkId = 3, Language = "JPN" }
        );

        context.EnglishVoiceWorks.AddRange(
            new() { EnglishVoiceWorkId = 1, VoiceWorkId = 1, ProductName = "Today Sounds", Description = "An average product." },
            new() { EnglishVoiceWorkId = 2, VoiceWorkId = 2, ProductName = "Super Comfy ASMR", Description = "An amazing product!" },
            new() { EnglishVoiceWorkId = 3, VoiceWorkId = 3, ProductName = "Low Effort", Description = "A bad product." },
            new() { EnglishVoiceWorkId = 4, VoiceWorkId = 4, ProductName = "Tomorrow Sounds", Description = "A average upcoming product." },
            new() { EnglishVoiceWorkId = 5, VoiceWorkId = 5, ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!" }
        );

        context.VoiceWorkLocalizations.AddRange(
            new() { VoiceWorkLocalizationId = 1, VoiceWorkId = 1, Language = "JPN", ProductName = "Today Sounds", Description = "An average product." },
            new() { VoiceWorkLocalizationId = 2, VoiceWorkId = 2, Language = "JPN", ProductName = "Super Comfy ASMR", Description = "An amazing product!" },
            new() { VoiceWorkLocalizationId = 3, VoiceWorkId = 3, Language = "JPN", ProductName = "Low Effort", Description = "A bad product." },
            new() { VoiceWorkLocalizationId = 4, VoiceWorkId = 4, Language = "JPN", ProductName = "Tomorrow Sounds", Description = "A average upcoming product." },
            new() { VoiceWorkLocalizationId = 5, VoiceWorkId = 5, Language = "JPN", ProductName = "Super Comfy ASMR+", Description = "All your favorite sounds, plus more!" }
        );

        context.VoiceWorkSearches.AddRange(
            new() { VoiceWorkId = 1, SearchText = "Search 1" },
            new() { VoiceWorkId = 2, SearchText = "Search 2" },
            new() { VoiceWorkId = 3, SearchText = "Search 3" },
            new() { VoiceWorkId = 4, SearchText = "Search 4" },
            new() { VoiceWorkId = 5, SearchText = "Search 5" }
        );

        await context.SaveChangesAsync();
    }
}