using System;
using System.Threading;
using System.Threading.Tasks;
using Data.Abstractions;
using Data.Models;
using Data.Models.Client;
using Microsoft.EntityFrameworkCore;

namespace Data.Context
{
    public static class ContextSeed
    {
        public static async Task Seed(IDatabaseContextFactory contextFactory, CancellationToken token)
        {
            await using var context = contextFactory.CreateContext();
            var strategy = context.Database.CreateExecutionStrategy();
            await strategy.ExecuteAsync(async () =>
            {
                await context.Database.MigrateAsync(token);
            });

            if (!await context.AliasLinks.AnyAsync(token))
            {
                var link = new EFAliasLink();

                context.Clients.Add(new EFClient
                {
                    Active = false,
                    Connections = 0,
                    FirstConnection = DateTime.UtcNow,
                    LastConnection = DateTime.UtcNow,
                    Level = EFClient.Permission.Console,
                    Masked = true,
                    NetworkId = 0,
                    AliasLink = link,
                    CurrentAlias = new EFAlias
                    {
                        Link = link,
                        Active = true,
                        DateAdded = DateTime.UtcNow,
                        Name = "IW4MAdmin",
                    },
                });

                await context.SaveChangesAsync(token);
            }
        }
    }
}