frappe.ui.form.on("Communication", {
	refresh: (frm) => {
		// setup custom Make button only if Communication is Email
		if(frm.doc.communication_medium == "Email" && frm.doc.sent_or_received == "Received") {
			frm.events.setup_custom_buttons(frm);
		}
	},

	setup_custom_buttons: (frm) => {
		let confirm_msg = "Are you sure you want to create {0} from this email?";
		if(frm.doc.reference_doctype !== "Issue") {
			frm.add_custom_button(__("Issue"), () => {
				frappe.confirm(__(confirm_msg, [__("Issue")]), () => {
					frm.trigger('make_issue_from_communication');
				})
			}, "Create");
		}

		if(!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) {
			frm.add_custom_button(__("Lead"), () => {
				frappe.confirm(__(confirm_msg, [__("Lead")]), () => {
					frm.trigger('make_lead_from_communication');
				})
			}, __('Create'));

			frm.add_custom_button(__("Opportunity"), () => {
				frappe.confirm(__(confirm_msg, [__("Opportunity")]), () => {
					frm.trigger('make_opportunity_from_communication');
				})
			}, __('Create'));
		}
	},

	make_lead_from_communication: (frm) => {
		return frappe.call({
			method: "erpnext.crm.doctype.lead.lead.make_lead_from_communication",
			args: {
				communication: frm.doc.name
			},
			freeze: true,
			callback: (r) => {
				if(r.message) {
					frm.reload_doc()
				}
			}
		})
	},

	make_issue_from_communication: (frm) => {
		return frappe.call({
			method: "erpnext.support.doctype.issue.issue.make_issue_from_communication",
			args: {
				communication: frm.doc.name
			},
			freeze: true,
			callback: (r) => {
				if(r.message) {
					frm.reload_doc()
				}
			}
		})
	},

	make_opportunity_from_communication: (frm) => {
		const fields = [{
			fieldtype: 'Link',
			label: __('Select a Company'),
			fieldname: 'company',
			options: 'Company',
			reqd: 1,
			default: frappe.defaults.get_user_default("Company")
		}];

		frappe.prompt(fields, data => {
			frappe.call({
				method: "erpnext.crm.doctype.opportunity.opportunity.make_opportunity_from_communication",
				args: {
					communication: frm.doc.name,
					company: data.company
				},
				freeze: true,
				callback: (r) => {
					if(r.message) {
						frm.reload_doc();
						frappe.show_alert({
							message: __("Opportunity {0} created",
								['<a href="/app/opportunity/'+r.message+'">' + r.message + '</a>']),
							indicator: 'green'
						});
					}
				}
			});
		},
		'Create an Opportunity',
		'Create');
	}
});