public static string GenerateTransactionName(TransactionGenData data)
        {
            switch (data.TransactionFormatType)
            {
            case TransactionFormatType.CompanyName:
                return(data.CompanyName);

            case TransactionFormatType.CompanyNameWithTransferNumber:
                return($"{data.CompanyName} {_faker.Finance.RoutingNumber()}");

            case TransactionFormatType.CardTypeCompanyName:
                return($"{_faker.PickRandom("CREDIT", "DEBIT", "TRANSFER")} {data.CompanyName}");

            case TransactionFormatType.CardTypeCompanyNameWithTransferNumber:
                return($"{_faker.PickRandom("CREDIT", "DEBIT", "TRANSFER")} {data.CompanyName} {_faker.Finance.RoutingNumber()}");

            case TransactionFormatType.PayPal:
                return($"PAYPAL *{data.CompanyName} {_faker.Finance.RoutingNumber()}");

            case TransactionFormatType.Payment:
                return($"Payment to {data.CompanyName} Ref {_faker.Finance.RoutingNumber()}");

            case TransactionFormatType.PosAuthorization:
            default:
                return($"{data.CompanyName} Ca Pos Authorisation");
            }
        }
        public static List <TransactionGenData> GenerateInitialData(int number, double chanceOfContradiction)
        {
            Dictionary <string, int> addedCompanies = new Dictionary <string, int>();

            List <TransactionGenData> list = new List <TransactionGenData>();

            for (int i = 0; i < number; ++i)
            {
                if (i > 0 && chanceOfContradiction > _random.NextDouble())
                {
                    var randomTransaction = _faker.PickRandom(list);

                    TransactionGenData conflictingData = new TransactionGenData
                    {
                        CompanyName           = randomTransaction.CompanyName,
                        Category              = _faker.Commerce.Categories(1).FirstOrDefault(),
                        TransactionFormatType = randomTransaction.TransactionFormatType,
                    };

                    list.Add(conflictingData);
                    continue;
                }

                string company = _faker.Company.CompanyName("{{name.lastName}}");
                if (addedCompanies.ContainsKey(company))
                {
                    company = _faker.Company.CompanyName("{{name.lastName}}");

                    if (addedCompanies.ContainsKey(company))
                    {
                        // In case it's still not unique
                        company = Guid.NewGuid().ToString();
                    }
                }

                TransactionGenData data = new TransactionGenData
                {
                    CompanyName           = company,
                    Category              = _faker.Commerce.Categories(1).FirstOrDefault(),
                    TransactionFormatType = _faker.PickRandom <TransactionFormatType>()
                };

                list.Add(data);
            }

            return(list);
        }