using InABox.Core;
using InABox.Database;
namespace PRS.Shared;
/// 
/// Updating Wpf and Timebench fields to use Platform.DesktopVersion and Platform.MobileVersion
/// 
public class Update_7_14 : DatabaseUpdateScript
{
    public override VersionNumber Version => new (7, 14);
    
    public override bool Update()
    {
        Logger.Send(LogType.Information, "", "Converting User.Wpf, User.Timebench -> User.Platform.DesktopVersion, User.Platform.MobileVersion");
        Logger.Send(LogType.Information, "", "Loading Wpf, Timebench properties");
        var props = DbFactory.NewProvider(Logger.Main).Query(new Filter(x => x.Name).InList("Wpf", "TimeBench"))
            .Rows.Select(x => x.ToObject()).ToArray();
        DatabaseSchema.Load(props);
        var columns = Columns.None().Add(x => x.ID);
        columns.Add("Wpf", "TimeBench");
        var users = DbFactory.NewProvider(Logger.Main).Query(
            new Filter().All(),
            columns).ToObjects().ToList();
        foreach(var user in users)
        {
            if(user.UserProperties.Dictionary.TryGetValue("Wpf", out var wpf))
            {
                user.Platform.DesktopVersion = wpf?.Value?.ToString() ?? "";
            }
            if (user.UserProperties.Dictionary.TryGetValue("TimeBench", out var timebench))
            {
                user.Platform.MobileVersion = timebench?.Value?.ToString() ?? "";
            }
        }
        DbFactory.NewProvider(Logger.Main).Save(users);
        Logger.Send(LogType.Information, "", "Finished updating user versions");
        return true;
    }
    
}