# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt

from __future__ import unicode_literals
from frappe import _
import frappe

def execute(filters=None):
	columns, data = get_columns(), get_data(filters)
	return columns, data

def get_columns():
	columns = [
		{
			"label": _("Lead"),
			"fieldname": "name",
			"fieldtype": "Link",
			"options": "Lead",
			"width": 150,
		},
		{
			"label": _("Lead Name"),
			"fieldname": "lead_name",
			"fieldtype": "Data",
			"width": 120
		},
		{
			"fieldname":"status",
			"label": _("Status"),
			"fieldtype": "Data",
			"width": 100
		},
		{
			"fieldname":"lead_owner",
			"label": _("Lead Owner"),
			"fieldtype": "Link",
			"options": "User",
			"width": 100
		},
		{
			"label": _("Territory"),
			"fieldname": "territory",
			"fieldtype": "Link",
			"options": "Territory",
			"width": 100
		},
		{
			"label": _("Source"),
			"fieldname": "source",
			"fieldtype": "Data",
			"width": 120
		},
		{
			"label": _("Email"),
			"fieldname": "email_id",
			"fieldtype": "Data",
			"width": 120
		},
		{
			"label": _("Mobile"),
			"fieldname": "mobile_no",
			"fieldtype": "Data",
			"width": 120
		},
		{
			"label": _("Phone"),
			"fieldname": "phone",
			"fieldtype": "Data",
			"width": 120
		},
		{
			"label": _("Owner"),
			"fieldname": "owner",
			"fieldtype": "Link",
			"options": "user",
			"width": 120
		},
		{
			"label": _("Company"),
			"fieldname": "company",
			"fieldtype": "Link",
			"options": "Company",
			"width": 120
		},
		{
			"fieldname":"address",
			"label": _("Address"),
			"fieldtype": "Data",
			"width": 130
		},
		{
			"fieldname":"state",
			"label": _("State"),
			"fieldtype": "Data",
			"width": 100
		},
		{
			"fieldname":"pincode",
			"label": _("Postal Code"),
			"fieldtype": "Data",
			"width": 90
		},
		{
			"fieldname":"country",
			"label": _("Country"),
			"fieldtype": "Link",
			"options": "Country",
			"width": 100
		},

	]
	return columns

def get_data(filters):
	return frappe.db.sql("""
		SELECT
			`tabLead`.name,
			`tabLead`.lead_name,
			`tabLead`.status,
			`tabLead`.lead_owner,
			`tabLead`.territory,
			`tabLead`.source,
			`tabLead`.email_id,
			`tabLead`.mobile_no,
			`tabLead`.phone,
			`tabLead`.owner,
			`tabLead`.company,
			concat_ws(', ',
				trim(',' from `tabAddress`.address_line1),
				trim(',' from tabAddress.address_line2)
			) AS address,
			`tabAddress`.state,
			`tabAddress`.pincode,
			`tabAddress`.country
		FROM
			`tabLead` left join `tabDynamic Link` on (
			`tabLead`.name = `tabDynamic Link`.link_name and
			`tabDynamic Link`.parenttype = 'Address')
			left join `tabAddress` on (
			`tabAddress`.name=`tabDynamic Link`.parent)
		WHERE
			company = %(company)s
			AND `tabLead`.creation BETWEEN %(from_date)s AND %(to_date)s
			{conditions}
		ORDER BY
			`tabLead`.creation asc """.format(conditions=get_conditions(filters)), filters, as_dict=1)

def get_conditions(filters) :
	conditions = []

	if filters.get("territory"):
		conditions.append(" and `tabLead`.territory=%(territory)s")

	if filters.get("status"):
		conditions.append(" and `tabLead`.status=%(status)s")

	return " ".join(conditions) if conditions else ""