# Copyright (c) 2018, Frappe and Contributors
# License: GNU General Public License v3. See license.txt

from __future__ import unicode_literals

import frappe
from frappe.model.utils.rename_field import rename_field


def execute():
	# Rename and reload the Land Unit and Linked Land Unit doctypes
	if frappe.db.table_exists('Land Unit') and not frappe.db.table_exists('Location'):
		frappe.rename_doc('DocType', 'Land Unit', 'Location', force=True)

	frappe.reload_doc('assets', 'doctype', 'location')

	if frappe.db.table_exists('Linked Land Unit') and not frappe.db.table_exists('Linked Location'):
		frappe.rename_doc('DocType', 'Linked Land Unit', 'Linked Location', force=True)

	frappe.reload_doc('assets', 'doctype', 'linked_location')

	if not frappe.db.table_exists('Crop Cycle'):
		frappe.reload_doc('agriculture', 'doctype', 'crop_cycle')

	# Rename the fields in related doctypes
	if 'linked_land_unit' in frappe.db.get_table_columns('Crop Cycle'):
		rename_field('Crop Cycle', 'linked_land_unit', 'linked_location')

	if 'land_unit' in frappe.db.get_table_columns('Linked Location'):
		rename_field('Linked Location', 'land_unit', 'location')

	if not frappe.db.exists("Location", "All Land Units"):
		frappe.get_doc({"doctype": "Location", "is_group": True, "location_name": "All Land Units"}).insert(ignore_permissions=True)

	if frappe.db.table_exists('Land Unit'):
		land_units = frappe.get_all('Land Unit', fields=['*'], order_by='lft')

		for land_unit in land_units:
			if not frappe.db.exists('Location', land_unit.get('land_unit_name')):
				frappe.get_doc({
					'doctype': 'Location',
					'location_name': land_unit.get('land_unit_name'),
					'parent_location': land_unit.get('parent_land_unit') or "All Land Units",
					'is_container': land_unit.get('is_container'),
					'is_group': land_unit.get('is_group'),
					'latitude': land_unit.get('latitude'),
					'longitude': land_unit.get('longitude'),
					'area': land_unit.get('area'),
					'location': land_unit.get('location'),
					'lft': land_unit.get('lft'),
					'rgt': land_unit.get('rgt')
				}).insert(ignore_permissions=True)

	# Delete the Land Unit and Linked Land Unit doctypes
	if frappe.db.table_exists('Land Unit'):
		frappe.delete_doc('DocType', 'Land Unit', force=1)

	if frappe.db.table_exists('Linked Land Unit'):
		frappe.delete_doc('DocType', 'Linked Land Unit', force=1)
