/// <summary>
        /// Generates a new order object
        /// Mind that some of the fields of the order (and it's sub-objects) are optional
        /// </summary>
        /// <param name="orderNum">The order number to put in the order object</param>
        /// <returns></returns>
        private static Order GenerateOrder(int orderNum)
        {
            var customerAddress = new BasicAddress(
                address1: "27 5th avenue",
                city: "Manhattan",
                country: "United States",
                countryCode: "US",
                phone: "5554321234",
                address2: "Appartment 5",
                zipCode: "54545"
                );

            // putting sample customer details
            var customer = new Customer(
                firstName: "John",
                lastName: "Doe",
                id: "405050606",
                ordersCount: 4,
                email: "*****@*****.**",
                verifiedEmail: true,
                createdAt: new DateTime(2013, 12, 8, 14, 12, 12, DateTimeKind.Local), // make sure to initialize DateTime with the correct timezone
                notes: "No additional info",
                address: customerAddress);

            // putting sample billing details
            var billing = new AddressInformation(
                firstName: "Ben",
                lastName: "Rolling",
                address1: "27 5th avenue",
                city: "Manhattan", 
                country: "United States",
                countryCode: "US",
                phone: "5554321234", 
                address2: "Appartment 5",
                zipCode: "54545",
                province: "New York",
                provinceCode: "NY",
                company: "IBM",
                fullName: "Ben Philip Rolling");

            var shipping = new AddressInformation(
                firstName: "Luke",
                lastName: "Rolling",
                address1: "4 Bermingham street", 
                city: "Cherry Hill",
                country: "United States",
                countryCode: "US", 
                phone: "55546665", 
                provinceCode: "NJ", 
                province: "New Jersey");

            var payments = new CreditCardPaymentDetails(
                avsResultCode: "Y",
                cvvResultCode: "n",
                creditCardBin: "124580", 
                creditCardCompany: "Visa",
                creditCardNumber: "XXXX-XXXX-XXXX-4242");

            var noChargeAmount = new NoChargeDetails(
                refundId: "123444",
                amount: 20.5,
                currency: "GBP",
                reason: "giftcard"
                );

            var lines = new[]
            {
                new ShippingLine(price: 22.22,title: "Mail"),
                new ShippingLine(price: 2,title: "Ship",code: "A22F")
            };

            var recipientSocial = new SocialDetails(
                                                    network: "Facebook",
                                                    publicUsername: "******",
                                                    accountUrl: "http://www.facebook.com/john.smith");

            var recipient = new Recipient(
                email: "*****@*****.**",
                phone: "96522444221",
                social: recipientSocial);


            var items = new[]
            {
                new LineItem(title: "Bag",price: 55.44,quantityPurchased: 1,productId: 48484,sku: "1272727",deliveredTo: DeliveredToType.StorePickup, delivered_at:new DateTime(2016, 12, 8, 14, 12, 12, DateTimeKind.Local)),
                new LineItem(title: "Monster", price: 22.3, quantityPurchased: 3, seller: new Seller(customer: customer,correspondence: 1, priceNegotiated: true, startingPrice: 120)),
                // Events Tickets Industry 
                new LineItem(title: "Concert", 
                             price: 123, 
                             quantityPurchased: 1, 
                             category: "Singers", 
                             subCategory: "Rock", 
                             eventName: "Bon Jovy", 
                             eventSectionName: "Section", 
                             eventCountry: "USA", 
                             eventCountryCode: "US",
                             latitude: 0,
                             longitude: 0),
                // Digital Goods (giftcard) industry
                new LineItem(title: "Concert", 
                            price: 123, 
                            quantityPurchased: 1, 
                            sender_name: "John", 
                            display_name: "JohnJohn", 
                            photo_uploaded: true, 
                            photo_url: "http://my_pic_url", 
                            greeting_photo_url: "http://my_greeting_pic_url", 
                            message: "Happy Birthday",
                            greeting_message: "Happy Birthday from John",
                            card_type: "regular",
                            card_sub_type: "birthday",
                            sender_email: "*****@*****.**",
                            recipient: recipient),
            };

            var discountCodes = new[] { new DiscountCode(moneyDiscountSum: 7, code: "1") };

            DecisionDetails decisionDetails = new DecisionDetails(ExternalStatusType.Approved, DateTime.Now); // make sure to initialize DateTime with the correct timezone

            // This is an example for an order with charge free sums (e.g. gift card payment)
            var chargeFreePayments = new ChargeFreePaymentDetails(
                gateway: "giftcard",
                amount: 45);

            // This is an example for client details section
            var clientDetails = new ClientDetails(
                accept_language: "en-CA",   
                user_agent: "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)");

            var order = new Order(
                merchantOrderId: orderNum.ToString(), 
                email: "*****@*****.**", 
                customer: customer, 
                paymentDetails: payments,
                billingAddress: billing,
                shippingAddress: shipping,
                lineItems: items,
                shippingLines: lines,
                gateway: "authorize_net",
                customerBrowserIp: "165.12.1.1",
                currency: "USD", 
                totalPrice: 100.60,
                createdAt: DateTime.Now, // make sure to initialize DateTime with the correct timezone
                updatedAt: DateTime.Now, // make sure to initialize DateTime with the correct timezone
                discountCodes: discountCodes,
                source: "web",
                noChargeDetails: noChargeAmount,
                decisionDetails: decisionDetails,
                vendorId: "2",
                vendorName: "domestic",
                additionalEmails: new [] {"*****@*****.**","*****@*****.**"},
                chargeFreePaymentDetails: chargeFreePayments,
                clientDetails: clientDetails,
                groupFounderOrderID: "2222"
                );

            return order;
        }
        private static OrderCheckoutDenied GenerateOrderCheckoutDenied(int orderNum)
        {
            var authorizationError = new AuthorizationError(
                                    createdAt: new DateTime(2013, 12, 8, 14, 12, 12, DateTimeKind.Local), // make sure to initialize DateTime with the correct timezone
                                    errorCode: AuthorizationErrorCode.CardDeclined,
                                    message: "Card was Declined.");

            var payments = new CreditCardPaymentDetails(
                            avsResultCode: "Y",
                            cvvResultCode: "n",
                            creditCardBin: "124580",
                            creditCardCompany: "Visa",
                            creditCardNumber: "XXXX-XXXX-XXXX-4242",
                            creditCardToken: "2233445566778899");
            payments.AuthorizationError = authorizationError;

            var orderCheckoutDenied = new OrderCheckoutDenied(orderNum.ToString());
            orderCheckoutDenied.PaymentDetails = payments;

            return orderCheckoutDenied;
        }