// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
// License: GNU General Public License v3. See license.txt
// js inside blog page
$(document).ready(function() {
	erpnext.cart.bind_events();
	return wn.call({
		type: "POST",
		method: "selling.utils.cart.get_cart_quotation",
		callback: function(r) {
			$("#cart-container").removeClass("hide");
			$(".progress").remove();
			if(r.exc) {
				if(r.exc.indexOf("WebsitePriceListMissingError")!==-1) {
					erpnext.cart.show_error("Oops!", "Price List not configured.");
				} else if(r["403"]) {
					erpnext.cart.show_error("Hey!", "You need to be logged in to view your cart.");
				} else {
					erpnext.cart.show_error("Oops!", "Something went wrong.");
				}
			} else {
				erpnext.cart.set_cart_count();
				erpnext.cart.render(r.message);
			}
		}
	});
});
// shopping cart
if(!erpnext.cart) erpnext.cart = {};
$.extend(erpnext.cart, {
	show_error: function(title, text) {
		$("#cart-container").html('
' + title + '
 ' + text + '');
	},
	
	bind_events: function() {
		// bind update button
		$(document).on("click", ".item-update-cart button", function() {
			var item_code = $(this).attr("data-item-code");
			erpnext.cart.update_cart({
				item_code: item_code,
				qty: $('input[data-item-code="'+item_code+'"]').val(),
				with_doclist: 1,
				btn: this,
				callback: function(r) {
					if(!r.exc) {
						erpnext.cart.render(r.message);
						var $button = $('button[data-item-code="'+item_code+'"]').addClass("btn-success");
						setTimeout(function() { $button.removeClass("btn-success"); }, 1000);
					}
				},
			});
		});
		
		$("#cart-add-shipping-address").on("click", function() {
			window.location.href = "address?address_fieldname=shipping_address_name";
		});
		
		$("#cart-add-billing-address").on("click", function() {
			window.location.href = "address?address_fieldname=customer_address";
		});
		
		$(".btn-place-order").on("click", function() {
			erpnext.cart.place_order(this);
		});
	},
	
	render: function(out) {
		var doclist = out.doclist;
		var addresses = out.addresses;
		
		var $cart_items = $("#cart-items").empty();
		var $cart_taxes = $("#cart-taxes").empty();
		var $cart_totals = $("#cart-totals").empty();
		var $cart_billing_address = $("#cart-billing-address").empty();
		var $cart_shipping_address = $("#cart-shipping-address").empty();
		
		var no_items = $.map(doclist, function(d) { return d.item_code || null;}).length===0;
		if(no_items) {
			erpnext.cart.show_error("Empty :-(", "Go ahead and add something to your cart.");
			$("#cart-addresses").toggle(false);
			return;
		}
		
		var shipping_rule_added = false;
		var taxes_exist = false;
		var shipping_rule_labels = $.map(out.shipping_rules || [], function(rule) { return rule[1]; });
		$.each(doclist, function(i, doc) {
			if(doc.doctype === "Quotation Item") {
				erpnext.cart.render_item_row($cart_items, doc);
			} else if (doc.doctype === "Sales Taxes and Charges") {
				if(out.shipping_rules && out.shipping_rules.length && 
					shipping_rule_labels.indexOf(doc.description)!==-1) {
						shipping_rule_added = true;
						erpnext.cart.render_tax_row($cart_taxes, doc, out.shipping_rules);
				} else {
					erpnext.cart.render_tax_row($cart_taxes, doc);
				}
				
				taxes_exist = true;
			}
		});
		
		if(out.shipping_rules && out.shipping_rules.length && !shipping_rule_added) {
			erpnext.cart.render_tax_row($cart_taxes, {description: "", formatted_tax_amount: ""},
				out.shipping_rules);
			taxes_exist = true;
		}
		
		if(taxes_exist)
			$('
').appendTo($cart_taxes);
			
		erpnext.cart.render_tax_row($cart_totals, {
			description: "Total", 
			formatted_tax_amount: "" + doclist[0].formatted_grand_total_export + ""
		});
		
		if(!(addresses && addresses.length)) {
			$cart_shipping_address.html('Hey! Go ahead and add an address
');
		} else {
			erpnext.cart.render_address($cart_shipping_address, addresses, doclist[0].shipping_address_name);
			erpnext.cart.render_address($cart_billing_address, addresses, doclist[0].customer_address);
		}
	},
	
	render_item_row: function($cart_items, doc) {
		doc.image_html = doc.website_image ?
			'' :
			'{% include "app/stock/doctype/item/templates/includes/product_missing_image.html" %}';
			
		if(doc.description === doc.item_name) doc.description = "";
		
		$(repl('\
			
\
			
\
				
\
				
at %(formatted_rate)s
\
				
= %(formatted_amount)s\
			
\
		
', doc)).appendTo($cart_items);
	},
	
	render_tax_row: function($cart_taxes, doc, shipping_rules) {
		var shipping_selector;
		if(shipping_rules) {
			shipping_selector = '';
		}
		
		var $tax_row = $(repl('\
			
\
				
\
					
' +
					(shipping_selector || '
%(description)s
') +
					'
\
				
\
			
\
			
\
				
%(formatted_tax_amount)s
\
			
\
		
");
					}
					
					$("#cart-error")
						.empty()
						.html(msg || "Something went wrong!")
						.toggle(true);
				} else {
					window.location.href = "order?name=" + encodeURIComponent(r.message);
				}
			}
		});
	}
});