bykovme/nswallet

View on GitHub
src/NSWallet/NSWallet.Shared/Business/BusinessLayerLabels.cs

Summary

Maintainability
A
1 hr
Test Coverage
using System.Collections.Generic;
using System.Linq;

namespace NSWallet.Shared
{
    public static partial class BL
    {
        public static void AddSystemLabels(bool reset = false)
        {
            var dal = DataAccessLayer.GetInstance();

            if (reset) {
                DeleteSystemLabels();
            } else {
                if (dal.Labels.Any()) return;
            }

            dal.CreateLabel(GConsts.FLDTYPE_MAIL, TR.TrEn(GConsts.FLDTYPE_MAIL), GConsts.FLDTYPE_MAIL_ICON, GConsts.VALUETYPE_MAIL, true);
            dal.CreateLabel(GConsts.FLDTYPE_EXPD, TR.TrEn(GConsts.FLDTYPE_EXPD), GConsts.FLDTYPE_EXPD_ICON, GConsts.VALUETYPE_DATE, true);
            dal.CreateLabel(GConsts.FLDTYPE_PASS, TR.TrEn(GConsts.FLDTYPE_PASS), GConsts.FLDTYPE_PASS_ICON, GConsts.VALUETYPE_PASS, true);
            dal.CreateLabel(GConsts.FLDTYPE_NOTE, TR.TrEn(GConsts.FLDTYPE_NOTE), GConsts.FLDTYPE_NOTE_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_LINK, TR.TrEn(GConsts.FLDTYPE_LINK), GConsts.FLDTYPE_LINK_ICON, GConsts.VALUETYPE_LINK, true);
            dal.CreateLabel(GConsts.FLDTYPE_ACNT, TR.TrEn(GConsts.FLDTYPE_ACNT), GConsts.FLDTYPE_ACNT_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_CARD, TR.TrEn(GConsts.FLDTYPE_CARD), GConsts.FLDTYPE_CARD_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_NAME, TR.TrEn(GConsts.FLDTYPE_NAME), GConsts.FLDTYPE_NAME_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_PHON, TR.TrEn(GConsts.FLDTYPE_PHON), GConsts.FLDTYPE_PHON_ICON, GConsts.VALUETYPE_PHON, true);
            dal.CreateLabel(GConsts.FLDTYPE_PINC, TR.TrEn(GConsts.FLDTYPE_PINC), GConsts.FLDTYPE_PINC_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_USER, TR.TrEn(GConsts.FLDTYPE_USER), GConsts.FLDTYPE_USER_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_OLDP, TR.TrEn(GConsts.FLDTYPE_OLDP), GConsts.FLDTYPE_OLDP_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_DATE, TR.TrEn(GConsts.FLDTYPE_DATE), GConsts.FLDTYPE_DATE_ICON, GConsts.VALUETYPE_DATE, true);
            dal.CreateLabel(GConsts.FLDTYPE_TIME, TR.TrEn(GConsts.FLDTYPE_TIME), GConsts.FLDTYPE_TIME_ICON, GConsts.VALUETYPE_TIME, true);
            dal.CreateLabel(GConsts.FLDTYPE_SNUM, TR.TrEn(GConsts.FLDTYPE_SNUM), GConsts.FLDTYPE_SNUM_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_ADDR, TR.TrEn(GConsts.FLDTYPE_ADDR), GConsts.FLDTYPE_ADDR_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_SQUE, TR.TrEn(GConsts.FLDTYPE_SQUE), GConsts.FLDTYPE_SQUE_ICON, GConsts.VALUETYPE_TEXT, true);
            dal.CreateLabel(GConsts.FLDTYPE_SANS, TR.TrEn(GConsts.FLDTYPE_SANS), GConsts.FLDTYPE_SANS_ICON, GConsts.VALUETYPE_TEXT, true);

            // Appeared after upgrade to 2FA (<see cref="PrepareUpgradeTo2FA"/>).
            dal.CreateLabel(GConsts.FLDTYPE_2FAC, TR.TrEn(GConsts.FLDTYPE_2FAC), GConsts.FLDTYPE_ACNT_ICON, GConsts.VALUETYPE_TEXT, true);
        }

        public static void DeleteSystemLabels()
        {
            var dal = DataAccessLayer.GetInstance();
            var labels = dal.Labels;
            var systemLabels = labels.Where(x => x.Value.System == true);
            foreach (var systemLabel in systemLabels) {
                dal.RemoveLabelForReal(systemLabel.Value.FieldType);
            }
        }

        public static string AddLabel(string name, string icon, string valueType, string labelID = null, bool system = false)
        {
            var dal = DataAccessLayer.GetInstance();

            if (labelID == null) {
                labelID = Common.GenerateUniqueString(GConsts.LABELID_LENGTH);
            }

            var result = dal.CreateLabel(labelID, name, icon, valueType, system);

            if (!result) {
                labelID = "";
            }

            return labelID;
        }

        public static int RemoveLabel(string fieldType)
        {
            var dal = DataAccessLayer.GetInstance();
            var result = dal.RemoveLabel(fieldType);
            return result;
        }

        public static void UpdateLabelIcon(string fieldType, string icon)
        {
            var dal = DataAccessLayer.GetInstance();
            dal.UpdateLabelIcon(fieldType, icon);
        }

        public static void UpdateLabelTitle(string fieldType, string name)
        {
            var dal = DataAccessLayer.GetInstance();
            dal.UpdateLabelTitle(fieldType, name);
        }


        public static List<NSWLabel> GetLabels()
        {
            var labelsList = new List<NSWLabel>();
            var dal = DataAccessLayer.GetInstance();

            foreach (var label in dal.Labels) {
                labelsList.Add(label.Value);
            }

            var sortedList = labelsList.OrderByDescending(x => x.System).ThenBy(y => y.Name).ToList();

            return sortedList;
        }

        public static List<NSWLabel> GetLabelsByUsage()
        {
            var labelsList = new List<NSWLabel>();
            var dal = DataAccessLayer.GetInstance();

            foreach (var label in dal.Labels) {
                labelsList.Add(label.Value);
            }

            var sortedList = labelsList.OrderByDescending(y => y.Usage).ToList();

            var cleverlySortedList = new List<NSWLabel>();
            for (int i = 0; i < GConsts.LISTLENGTH_OF_CLEVER_LABELS && i < sortedList.Capacity; i++) {
                cleverlySortedList.Add(sortedList[i]);
            }

            sortedList = labelsList.OrderBy(y => y.Name).ToList();

            foreach(var label in sortedList) {
                if (cleverlySortedList.Exists(f => f.FieldType == label.FieldType)) continue;
                cleverlySortedList.Add(label);
            }

            return cleverlySortedList;
        }
    }
}