import influxframework
from influxframework.custom.doctype.custom_field.custom_field import create_custom_fields

from influxerp.influxerp_integrations.doctype.taxjar_settings.taxjar_settings import add_permissions


def execute():
	company = influxframework.get_all("Company", filters={"country": "United States"}, fields=["name"])
	if not company:
		return

	TAXJAR_CREATE_TRANSACTIONS = influxframework.db.get_single_value(
		"TaxJar Settings", "taxjar_create_transactions"
	)
	TAXJAR_CALCULATE_TAX = influxframework.db.get_single_value("TaxJar Settings", "taxjar_calculate_tax")
	TAXJAR_SANDBOX_MODE = influxframework.db.get_single_value("TaxJar Settings", "is_sandbox")

	if not TAXJAR_CREATE_TRANSACTIONS and not TAXJAR_CALCULATE_TAX and not TAXJAR_SANDBOX_MODE:
		return

	custom_fields = {
		"Sales Invoice Item": [
			dict(
				fieldname="product_tax_category",
				fieldtype="Link",
				insert_after="description",
				options="Product Tax Category",
				label="Product Tax Category",
				fetch_from="item_code.product_tax_category",
			),
			dict(
				fieldname="tax_collectable",
				fieldtype="Currency",
				insert_after="net_amount",
				label="Tax Collectable",
				read_only=1,
				options="currency",
			),
			dict(
				fieldname="taxable_amount",
				fieldtype="Currency",
				insert_after="tax_collectable",
				label="Taxable Amount",
				read_only=1,
				options="currency",
			),
		],
		"Item": [
			dict(
				fieldname="product_tax_category",
				fieldtype="Link",
				insert_after="item_group",
				options="Product Tax Category",
				label="Product Tax Category",
			)
		],
		"TaxJar Settings": [
			dict(
				fieldname="company",
				fieldtype="Link",
				insert_after="configuration",
				options="Company",
				label="Company",
			)
		],
	}
	create_custom_fields(custom_fields, update=True)
	add_permissions()
	influxframework.enqueue(
		"influxerp.influxerp_integrations.doctype.taxjar_settings.taxjar_settings.add_product_tax_categories",
		now=True,
	)
