using SharpChat.Users;

namespace SharpChat.SQLite;

public static class SQLiteUserPermissionsConverter {
    public static UserPermissions From(SQLiteUserPermissions sup) {
        UserPermissions up = 0;

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

        return up;
    }

    public static SQLiteUserPermissions To(UserPermissions up) {
        SQLiteUserPermissions sup = 0;

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

        return sup;
    }
}