using SharpChat.Users;

namespace SharpChat.MariaDB;

public static class MariaDBUserPermissionsConverter {
    public static UserPermissions From(MariaDBUserPermissions mup) {
        UserPermissions perms = 0;

        if(mup.HasFlag(MariaDBUserPermissions.KickUser))
            perms |= UserPermissions.KickUser;
        if(mup.HasFlag(MariaDBUserPermissions.BanUser))
            perms |= UserPermissions.BanUser;
        if(mup.HasFlag(MariaDBUserPermissions.Broadcast))
            perms |= UserPermissions.SendBroadcast;
        if(mup.HasFlag(MariaDBUserPermissions.SetOwnNickname))
            perms |= UserPermissions.SetOwnNickname;
        if(mup.HasFlag(MariaDBUserPermissions.SetOthersNickname))
            perms |= UserPermissions.SetOthersNickname;
        if(mup.HasFlag(MariaDBUserPermissions.CreateChannel))
            perms |= UserPermissions.CreateChannel;
        if(mup.HasFlag(MariaDBUserPermissions.DeleteChannel))
            perms |= UserPermissions.DeleteChannel;
        if(mup.HasFlag(MariaDBUserPermissions.SetChannelPermanent))
            perms |= UserPermissions.SetChannelPermanent;
        if(mup.HasFlag(MariaDBUserPermissions.SetChannelPassword))
            perms |= UserPermissions.SetChannelPassword;
        if(mup.HasFlag(MariaDBUserPermissions.SetChannelHierarchy))
            perms |= UserPermissions.SetChannelMinimumRank;
        if(mup.HasFlag(MariaDBUserPermissions.JoinAnyChannel))
            perms |= UserPermissions.JoinAnyChannel;
        if(mup.HasFlag(MariaDBUserPermissions.SendMessage))
            perms |= UserPermissions.SendMessage;
        if(mup.HasFlag(MariaDBUserPermissions.DeleteOwnMessage))
            perms |= UserPermissions.DeleteOwnMessage;
        if(mup.HasFlag(MariaDBUserPermissions.DeleteAnyMessage))
            perms |= UserPermissions.DeleteAnyMessage;
        if(mup.HasFlag(MariaDBUserPermissions.EditOwnMessage))
            perms |= UserPermissions.EditOwnMessage;
        if(mup.HasFlag(MariaDBUserPermissions.EditAnyMessage))
            perms |= UserPermissions.EditAnyMessage;
        if(mup.HasFlag(MariaDBUserPermissions.SeeIPAddress))
            perms |= UserPermissions.ViewIPAddress;
        if(mup.HasFlag(MariaDBUserPermissions.ViewLogs))
            perms |= UserPermissions.ViewLogs;
        if(mup.HasFlag(MariaDBUserPermissions.ViewBanList))
            perms |= UserPermissions.ViewBanList;
        if(mup.HasFlag(MariaDBUserPermissions.PardonUser))
            perms |= UserPermissions.PardonUser;
        if(mup.HasFlag(MariaDBUserPermissions.PardonIPAddress))
            perms |= UserPermissions.PardonIPAddress;

        return perms;
    }

    public static MariaDBUserPermissions To(UserPermissions up) {
        MariaDBUserPermissions perms = 0;

        if(up.HasFlag(UserPermissions.KickUser))
            perms |= MariaDBUserPermissions.KickUser;
        if(up.HasFlag(UserPermissions.BanUser))
            perms |= MariaDBUserPermissions.BanUser;
        if(up.HasFlag(UserPermissions.SendBroadcast))
            perms |= MariaDBUserPermissions.Broadcast;
        if(up.HasFlag(UserPermissions.SetOwnNickname))
            perms |= MariaDBUserPermissions.SetOwnNickname;
        if(up.HasFlag(UserPermissions.SetOthersNickname))
            perms |= MariaDBUserPermissions.SetOthersNickname;
        if(up.HasFlag(UserPermissions.CreateChannel))
            perms |= MariaDBUserPermissions.CreateChannel;
        if(up.HasFlag(UserPermissions.DeleteChannel))
            perms |= MariaDBUserPermissions.DeleteChannel;
        if(up.HasFlag(UserPermissions.SetChannelPermanent))
            perms |= MariaDBUserPermissions.SetChannelPermanent;
        if(up.HasFlag(UserPermissions.SetChannelPassword))
            perms |= MariaDBUserPermissions.SetChannelPassword;
        if(up.HasFlag(UserPermissions.SetChannelMinimumRank))
            perms |= MariaDBUserPermissions.SetChannelHierarchy;
        if(up.HasFlag(UserPermissions.JoinAnyChannel))
            perms |= MariaDBUserPermissions.JoinAnyChannel;
        if(up.HasFlag(UserPermissions.SendMessage))
            perms |= MariaDBUserPermissions.SendMessage;
        if(up.HasFlag(UserPermissions.DeleteOwnMessage))
            perms |= MariaDBUserPermissions.DeleteOwnMessage;
        if(up.HasFlag(UserPermissions.DeleteAnyMessage))
            perms |= MariaDBUserPermissions.DeleteAnyMessage;
        if(up.HasFlag(UserPermissions.EditOwnMessage))
            perms |= MariaDBUserPermissions.EditOwnMessage;
        if(up.HasFlag(UserPermissions.EditAnyMessage))
            perms |= MariaDBUserPermissions.EditAnyMessage;
        if(up.HasFlag(UserPermissions.ViewIPAddress))
            perms |= MariaDBUserPermissions.SeeIPAddress;
        if(up.HasFlag(UserPermissions.ViewLogs))
            perms |= MariaDBUserPermissions.ViewLogs;
        if(up.HasFlag(UserPermissions.ViewBanList))
            perms |= MariaDBUserPermissions.ViewBanList;
        if(up.HasFlag(UserPermissions.PardonUser))
            perms |= MariaDBUserPermissions.PardonUser;
        if(up.HasFlag(UserPermissions.PardonIPAddress))
            perms |= MariaDBUserPermissions.PardonIPAddress;

        return perms;
    }
}