// Код для экспорта XML и автоматического заполнения из Asset
frappe.ui.form.on('Property tax return', {
	refresh: function(frm) {
		// Add Export XML button
		frm.add_custom_button(__('Export XML'), function() {
			frappe.call({
				method: 'taxes_az.taxes_az.doctype.xml_mapping_tool.xml_mapping_tool.generate_xml',
				args: {
					mapping_tool: 'Property tax return',
					doctype: 'Property tax return',
					docname: frm.docname
				},
				callback: function(r) {
					if (r.message) {
						// Создаем временный элемент для скачивания
						var element = document.createElement('a');
						element.setAttribute('href', 'data:text/xml;charset=utf-8,' + encodeURIComponent(r.message));
						element.setAttribute('download', frm.docname + '.xml');
						element.style.display = 'none';
						document.body.appendChild(element);
						element.click();
						document.body.removeChild(element);

						frappe.show_alert({
							message: __('XML file generated and downloaded'),
							indicator: 'green'
						});
					}
				}
			});
		}, __('Actions'));

		// Ensure checkbox exclusivity on load
		setup_checkbox_exclusivity(frm);

		// Toggle field readonly based on il_erzinde checkbox
		toggle_field_readonly(frm);

		// Apply conditional table logic after client scripts have populated tables
		setTimeout(() => {
			apply_conditional_table_logic(frm);
		}, 100);

		// Calculate binalar totals on load
		calculate_binalar_totals(frm);

		// Calculate totals for Elave 1 and Elave 2
		calculate_elave_1_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);

		// Validate minimum asset values
		validate_minimum_asset_value(frm);

		// Calculate 509.1 and 509.2 on load
		calculate_509_1(frm);
		calculate_509_2(frm);
	},

	// Handle year changes
	il: function(frm) {
		if (frm.doc.il && (frm.doc.tam_il || frm.doc.il_erzinde)) {
			reload_property_tax_data(frm);
		}
		calculate_509_1(frm);
		calculate_509_2(frm);
	},

	// Checkbox handlers - ensure mutual exclusivity
	tam_il: function(frm) {
		if (frm.doc.tam_il) {
			frm.set_value('il_erzinde', 0);
			toggle_field_readonly(frm);

			// Apply conditional logic when switching to tam_il
			apply_conditional_table_logic(frm);

			// Clear warnings when switching to tam_il
			validate_minimum_asset_value(frm);

			// Calculate 509.1 and 509.2
			calculate_509_1(frm);
			calculate_509_2(frm);

			if (frm.doc.il) {
				reload_property_tax_data(frm);
			}
		} else if (!frm.doc.il_erzinde) {
			// If unchecking tam_il and il_erzinde is also unchecked, default to tam_il
			frm.set_value('tam_il', 1);
		}
	},

	il_erzinde: function(frm) {
		if (frm.doc.il_erzinde) {
			frm.set_value('tam_il', 0);
			toggle_field_readonly(frm);

			// Apply conditional logic when switching to il_erzinde
			apply_conditional_table_logic(frm);

			// Validate when checking il_erzinde
			validate_minimum_asset_value(frm);

			// Calculate 509.1 and 509.2
			calculate_509_1(frm);
			calculate_509_2(frm);

			if (frm.doc.il) {
				reload_property_tax_data(frm);
			}
		} else if (!frm.doc.tam_il) {
			// If unchecking il_erzinde and tam_il is also unchecked, default to tam_il
			frm.set_value('tam_il', 1);
		} else {
			// Clear warnings when unchecking il_erzinde
			validate_minimum_asset_value(frm);
			calculate_509_1(frm);
			calculate_509_2(frm);
		}
	},

	validate: function(frm) {
		return validate_minimum_asset_value(frm);
	}
});

function setup_checkbox_exclusivity(frm) {
	// Ensure at least one is always checked
	if (!frm.doc.tam_il && !frm.doc.il_erzinde) {
		frm.set_value('tam_il', 1);
	}
	// Ensure only one is checked
	if (frm.doc.tam_il && frm.doc.il_erzinde) {
		frm.set_value('il_erzinde', 0);
	}
}

function toggle_field_readonly(frm) {
	// Если выбран "İl Ərzində", поля 501.1 и 501.2 должны быть скрыты
	const hide_column = frm.doc.il_erzinde ? 1 : 0; // 1 = скрыть, 0 = показать

	// Для əlavə 2 (taxable assets) - поле 501.1
	if (frm.get_field('elave_2')) {
		const grid = frm.get_field('elave_2').grid;
		grid.update_docfield_property('hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyəri', 'hidden', hide_column);
		grid.reset_grid();
	}

	// Для əlavə 1 (tax exempt assets) - поле 501.2
	if (frm.get_field('elave_1')) {
		const grid = frm.get_field('elave_1').grid;
		grid.update_docfield_property('hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyərimanatla5012', 'hidden', hide_column);
		grid.reset_grid();
	}
}

// ==================== CONDITIONAL TABLE VISIBILITY AND FILTERING ====================
// Show/hide tables and filter rows based on tam_il vs il_erzinde selection

function apply_conditional_table_logic(frm) {
	const is_tam_il = frm.doc.tam_il;
	const is_il_erzinde = frm.doc.il_erzinde;

	toggle_vergi_hesab_1ci_tables(frm, is_tam_il, is_il_erzinde);
	filter_vergi_hesab_5ci_rows(frm, is_tam_il, is_il_erzinde);
	filter_vergi_hesab_6ci_rows(frm, is_tam_il, is_il_erzinde);
}

function toggle_vergi_hesab_1ci_tables(frm, is_tam_il, is_il_erzinde) {
	// Hide vergi_hesab_1ci if il_erzinde is checked
	frm.set_df_property('vergi_hesab_1ci', 'hidden', is_il_erzinde ? 1 : 0);

	// Hide vergi_hesab_1ci_1 if tam_il is checked
	frm.set_df_property('vergi_hesab_1ci_1', 'hidden', is_tam_il ? 1 : 0);

	// Hide vergi_hesab_4cu_1 if tam_il is checked (показывать только для İl Ərzində)
	frm.set_df_property('vergi_hesab_4cu_1', 'hidden', is_tam_il ? 1 : 0);

	frm.refresh_field('vergi_hesab_1ci');
	frm.refresh_field('vergi_hesab_1ci_1');
	frm.refresh_field('vergi_hesab_4cu_1');
}

function filter_vergi_hesab_5ci_rows(frm, is_tam_il, is_il_erzinde) {
	// Initialize global storage for saved values
	if (!window.property_tax_saved_values) {
		window.property_tax_saved_values = {
			vergi_hesab_5ci: {},
			vergi_hesab_6ci: {}
		};
	}

	// Save current values before clearing
	(frm.doc.vergi_hesab_5ci || []).forEach(row => {
		if (row.göstəricilər) {
			window.property_tax_saved_values.vergi_hesab_5ci[row.göstəricilər] = row.manatla || 0;
		}
	});

	// Define which rows should exist for current mode
	let required_rows = [];
	if (is_tam_il) {
		required_rows = [
			'509.1 Vergi ödəyicisi il ərzində tam fəaliyyət göstərdiyi halda:',
			'510 Vergi məcəlləsinin 199.21-ci maddəsinə əsasən azaldılmalı əmlak vergisinin məbləği'
		];
	} else if (is_il_erzinde) {
		required_rows = [
			'509.2 Hesabat ili ərzində yaradıldığı (uçota alındığı) və ya əmlak vergisi ödəyicisi olduğu halda:',
			'510 Vergi məcəlləsinin 199.21-ci maddəsinə əsasən azaldılmalı əmlak vergisinin məbləği'
		];
	}

	// Clear table and recreate with required rows
	frm.clear_table('vergi_hesab_5ci');
	required_rows.forEach(row_text => {
		let new_row = frm.add_child('vergi_hesab_5ci');
		new_row.göstəricilər = row_text;
		// Restore saved value if exists, otherwise 0
		new_row.manatla = window.property_tax_saved_values.vergi_hesab_5ci[row_text] || 0;
	});

	frm.refresh_field('vergi_hesab_5ci');
}

function filter_vergi_hesab_6ci_rows(frm, is_tam_il, is_il_erzinde) {
	// Initialize global storage for saved values (if not already done)
	if (!window.property_tax_saved_values) {
		window.property_tax_saved_values = {
			vergi_hesab_5ci: {},
			vergi_hesab_6ci: {}
		};
	}

	// Save current values before clearing
	(frm.doc.vergi_hesab_6ci || []).forEach(row => {
		if (row.göstəricilər) {
			window.property_tax_saved_values.vergi_hesab_6ci[row.göstəricilər] = row.manatla || 0;
		}
	});

	// Define which rows should exist for current mode
	let required_rows = [];
	if (is_tam_il) {
		required_rows = [
			'511.1 Müəssisə il ərzində tam fəaliyyət göstərdiyi halda'
		];
	} else if (is_il_erzinde) {
		required_rows = [
			'511.2 Müəssisə il ərzində yarandığı halda'
		];
	}

	// Clear table and recreate with required rows
	frm.clear_table('vergi_hesab_6ci');
	required_rows.forEach(row_text => {
		let new_row = frm.add_child('vergi_hesab_6ci');
		new_row.göstəricilər = row_text;
		// Restore saved value if exists, otherwise 0
		new_row.manatla = window.property_tax_saved_values.vergi_hesab_6ci[row_text] || 0;
	});

	frm.refresh_field('vergi_hesab_6ci');
}

// ==================== END CONDITIONAL LOGIC ====================

function calculate_binalar_totals(frm) {
	if (!frm.doc.elave_2 || !frm.doc.elave_2.length) {
		return;
	}

	// Найти строки 1.1-1.6 и строку 1
	const subcategories = [];
	let binalar_row = null;

	frm.doc.elave_2.forEach(row => {
		const category = row.vergiyəcəlbolunanəmlaklarınkateqoriyası || '';

		if (category === '1. Binalar, tikilil\u0259r v\u0259 qur\u011fular') {
			binalar_row = row;
		} else if (category.match(/^1\.[1-6]/)) {
			// Строки 1.1, 1.2, 1.3, 1.4, 1.5, 1.6
			subcategories.push(row);
		}
	});

	// Если нет строки 1, ничего не делаем
	if (!binalar_row) {
		return;
	}

	// Суммируем все числовые поля
	const fields_to_sum = [
		'hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyəri',  // 501.1
		'ləğvolunmatarixinəəsasvəsaitlərinqalıqdəyəri',     // 502.1
		'hesabatilierzindeuçotaalınan',                      // 503.1
		'hesabatilinsonunaəsasvəsaitlərinqalıqdəyəri',      // 504.1
		'artıqqiymətəəsasvəsaitlərindəyəri505'              // 505.1
	];

	fields_to_sum.forEach(field => {
		let total = 0;
		subcategories.forEach(subrow => {
			total += flt(subrow[field]);
		});

		frappe.model.set_value(binalar_row.doctype, binalar_row.name, field, total);
	});
}

function calculate_elave_1_totals(frm) {
	if (!frm.doc.elave_1 || !frm.doc.elave_1.length) {
		return;
	}

	// Найти итоговую строку "Vergidən azad olunan əmlakın CƏMİ dəyəri:"
	let total_row = null;
	const other_rows = [];

	frm.doc.elave_1.forEach(row => {
		const azadolma = row.azadolmasəbəbi || '';

		if (azadolma === 'Vergidən azad olunan əmlakın CƏMİ dəyəri:') {
			total_row = row;
		} else {
			// Все остальные строки для суммирования
			other_rows.push(row);
		}
	});

	// Если нет итоговой строки, ничего не делаем
	if (!total_row) {
		return;
	}

	// Суммируем все числовые поля из всех строк (кроме итоговой)
	const fields_to_sum = [
		'hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyərimanatla5012',  // 501.2
		'ləğvolunmatarixinəəsasvəsaitlərinqalıqdəyəri',                // 502.2
		'hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri',                 // 503.2
		'ilinsonunaəsasvəsaitlərinqalıqdəyəri',                         // 504.2
		'artıqqiymətəəsasvəsaitlərindəyəri'                            // 505.2
	];

	fields_to_sum.forEach(field => {
		let total = 0;
		other_rows.forEach(row => {
			total += flt(row[field]);
		});

		frappe.model.set_value(total_row.doctype, total_row.name, field, total);
	});
}

function calculate_elave_2_totals(frm) {
	if (!frm.doc.elave_2 || !frm.doc.elave_2.length) {
		return;
	}

	// Найти итоговую строку "Vergiyə cəlb olunan əmlakın CƏMİ dəyəri:"
	let total_row = null;
	const other_rows = [];

	frm.doc.elave_2.forEach(row => {
		const category = row.vergiyəcəlbolunanəmlaklarınkateqoriyası || '';

		if (category === 'Vergiyə cəlb olunan əmlakın CƏMİ dəyəri:') {
			total_row = row;
		} else if (category !== '1. Binalar, tikililər və qurğular') {
			// Все остальные строки для суммирования (кроме итоговой и строки Binalar)
			other_rows.push(row);
		}
	});

	// Если нет итоговой строки, ничего не делаем
	if (!total_row) {
		return;
	}

	// Суммируем все числовые поля из всех строк (кроме итоговой и Binalar)
	const fields_to_sum = [
		'hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyəri',  // 501.1
		'ləğvolunmatarixinəəsasvəsaitlərinqalıqdəyəri',     // 502.1
		'hesabatilierzindeuçotaalınan',                      // 503.1
		'hesabatilinsonunaəsasvəsaitlərinqalıqdəyəri',      // 504.1
		'artıqqiymətəəsasvəsaitlərindəyəri505'              // 505.1 (страхование)
	];

	fields_to_sum.forEach(field => {
		let total = 0;
		other_rows.forEach(row => {
			total += flt(row[field]);
		});

		frappe.model.set_value(total_row.doctype, total_row.name, field, total);
	});
}

function reload_property_tax_data(frm) {
	// Validate required fields
	if (!frm.doc.il) {
		frappe.msgprint(__('Please select a year (İl) first'));
		return;
	}

	if (!frm.doc.tam_il && !frm.doc.il_erzinde) {
		frappe.msgprint(__('Please select either Tam İl or İl Ərzində'));
		return;
	}

	// Show loading indicator
	frappe.dom.freeze(__('Loading property tax data...'));

	// Calculate date range from year
	const from_date = `${frm.doc.il}-01-01`;
	const to_date = `${frm.doc.il}-12-31`;
	const calculation_mode = frm.doc.tam_il ? 'tam_il' : 'il_erzinde';

	// Get default company
	const company = frappe.defaults.get_user_default('Company');

	// Call server-side method
	frappe.call({
		method: 'taxes_az.taxes_az.doctype.property_tax_return.property_tax_return.populate_property_tax_tables',
		args: {
			company: company,
			year: frm.doc.il,
			from_date: from_date,
			to_date: to_date,
			calculation_mode: calculation_mode,
			existing_elave_1: frm.doc.elave_1 || [],
			existing_elave_2: frm.doc.elave_2 || []
		},
		callback: function(r) {
			frappe.dom.unfreeze();

			if (r.message && r.message.success) {
				// Update Əlavə 1 (Tax Exempt)
				update_child_table_values(frm, 'elave_1', r.message.elave_1_data);

				// Update Əlavə 2 (Taxable)
				update_child_table_values(frm, 'elave_2', r.message.elave_2_data);

				// Update vergi_hesab_4cu_1 based on il_erzinde checkbox
				update_vergi_hesab_4cu_1(frm, company);

				frm.refresh_fields();

				// Calculate 509.1 and 509.2 after data reload
				calculate_509_1(frm);
				calculate_509_2(frm);

				frappe.show_alert({
					message: __('Property tax data loaded successfully'),
					indicator: 'green'
				});
			} else {
				frappe.msgprint({
					title: __('Error'),
					message: r.message ? r.message.error : __('Failed to load data'),
					indicator: 'red'
				});
			}
		},
		error: function(err) {
			frappe.dom.unfreeze();
			frappe.msgprint({
				title: __('Error'),
				message: __('Server error while loading data'),
				indicator: 'red'
			});
		}
	});
}

function update_child_table_values(frm, table_name, data_map) {
	if (!frm.doc[table_name]) {
		return;
	}

	frm.doc[table_name].forEach(function(row) {
		// Find matching data based on the identifier field
		let matching_key = null;

		if (table_name === 'elave_1') {
			matching_key = row['azadolmasəbəbi'];
		} else if (table_name === 'elave_2') {
			matching_key = row['vergiyəcəlbolunanəmlaklarınkateqoriyası'];
		}

		// Update row with values from data_map
		if (matching_key && data_map[matching_key]) {
			const field_data = data_map[matching_key];

			Object.keys(field_data).forEach(function(field) {
				const value = field_data[field];
				frappe.model.set_value(row.doctype, row.name, field, value);
			});
		}
	});

	// After updating all rows, recalculate totals
	if (table_name === 'elave_2') {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
		// Validate after auto-populating Əlavə 2
		try {
			validate_minimum_asset_value(frm);
		} catch (e) {
			console.log('Validation error:', e);
		}
	} else if (table_name === 'elave_1') {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
		// Validate after auto-populating Əlavə 1
		try {
			validate_minimum_asset_value(frm);
		} catch (e) {
			console.log('Validation error:', e);
		}
	}
}

// ==================== UPDATE VERGI_HESAB_4CU_1 ====================
// Update the 'ayla' field in vergi_hesab_4cu_1 based on earliest Asset

function update_vergi_hesab_4cu_1(frm, company) {
	if (frm.doc.il_erzinde) {
		// Расчет месяцев только для İl Ərzində режима
		frappe.call({
			method: 'taxes_az.taxes_az.doctype.property_tax_return.property_tax_return.calculate_months_for_vergi_hesab_4cu_1',
			args: {
				company: company,
				year: frm.doc.il
			},
			callback: function(r) {
				if (r.message !== undefined && frm.doc.vergi_hesab_4cu_1 && frm.doc.vergi_hesab_4cu_1.length > 0) {
					// Обновить первую строку
					const first_row = frm.doc.vergi_hesab_4cu_1[0];
					frappe.model.set_value(first_row.doctype, first_row.name, 'ayla', r.message);
					frm.refresh_field('vergi_hesab_4cu_1');
				}
			}
		});
	} else {
		// Очистить поле ayla если tam_il
		if (frm.doc.vergi_hesab_4cu_1 && frm.doc.vergi_hesab_4cu_1.length > 0) {
			const first_row = frm.doc.vergi_hesab_4cu_1[0];
			frappe.model.set_value(first_row.doctype, first_row.name, 'ayla', 0);
			frm.refresh_field('vergi_hesab_4cu_1');
		}
	}
}

// ==================== MINIMUM ASSET VALUE VALIDATION ====================
// Validate that asset values in columns 503.1 and 503.2 are >= 500 AZN
// when il_erzinde mode is selected

function validate_minimum_asset_value(frm) {
	// Only run if il_erzinde is checked
	if (!frm.doc.il_erzinde) {
		// Hide warnings and allow save
		const field1 = frm.get_field('warning_elave_1_html');
		const field2 = frm.get_field('warning_elave_2_html');
		if (field1) field1.$wrapper.hide();
		if (field2) field2.$wrapper.hide();

		// Remove emoji from both tabs
		show_warning_if_needed(frm, 'elave_1', false);
		show_warning_if_needed(frm, 'elave_2', false);

		// Clear any cell highlights
		highlight_invalid_cells(frm, [], []);

		return true;
	}

	let has_error_elave_1 = false;
	let has_error_elave_2 = false;
	let invalid_rows_1 = [];
	let invalid_rows_2 = [];

	// Check Əlavə 1 (column 503.2)
	(frm.doc.elave_1 || []).forEach((row, idx) => {
		let value = row.hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri;

		// Skip if value is null, undefined, or empty
		if (value === null || value === undefined || value === '') {
			return;
		}

		// Convert to number (handle both comma and dot as decimal separator)
		let numValue = parseFloat(String(value).replace(',', '.'));

		// Only flag as invalid if: value is a valid number, greater than 0, and less than 500
		if (!isNaN(numValue) && numValue > 0 && numValue < 500) {
			has_error_elave_1 = true;
			invalid_rows_1.push({name: row.name, value: numValue, category: row.azadolmasəbəbi});
		}
	});

	// Check Əlavə 2 (column 503.1)
	(frm.doc.elave_2 || []).forEach((row, idx) => {
		let value = row.hesabatilierzindeuçotaalınan;

		// Skip if value is null, undefined, or empty
		if (value === null || value === undefined || value === '') {
			return;
		}

		// Convert to number (handle both comma and dot as decimal separator)
		let numValue = parseFloat(String(value).replace(',', '.'));

		// Only flag as invalid if: value is a valid number, greater than 0, and less than 500
		if (!isNaN(numValue) && numValue > 0 && numValue < 500) {
			has_error_elave_2 = true;
			invalid_rows_2.push({name: row.name, value: numValue, category: row.vergiyəcəlbolunanəmlaklarınkateqoriyası});
		}
	});

	// Debug logging
	if (invalid_rows_1.length > 0) {
		console.log('Əlavə 1 invalid rows:', invalid_rows_1.map(r => ({name: r.name, value: r.value})));
	}
	if (invalid_rows_2.length > 0) {
		console.log('Əlavə 2 invalid rows:', invalid_rows_2.map(r => ({name: r.name, value: r.value})));
	}

	// Highlight invalid cells in red
	highlight_invalid_cells(frm, invalid_rows_1, invalid_rows_2);

	// Show/hide warnings and set validation state
	show_warning_if_needed(frm, 'elave_1', has_error_elave_1);
	show_warning_if_needed(frm, 'elave_2', has_error_elave_2);

	// Block save if any errors
	if (has_error_elave_1 || has_error_elave_2) {
		frm.validated = false;
		return false;
	}

	return true;
}

function show_warning_if_needed(frm, table_name, has_error) {
	const field_name = `warning_${table_name}_html`;
	const field = frm.get_field(field_name);

	if (!field) return;

	if (has_error) {
		// Unhide the field
		frm.set_df_property(field_name, 'hidden', 0);

		// Show red warning message
		const warning_html = `
			<div style="padding: 15px; background-color: #ffe6e6; border: 2px solid #ff0000; border-radius: 5px; margin-bottom: 15px;">
				<p style="color: #ff0000; font-weight: bold; font-size: 14px; margin: 0;">
					⚠️ Əsas vəsaitlərin dəyəri 500 manatdan az ola bilməz
				</p>
			</div>
		`;
		field.$wrapper.html(warning_html);
		field.$wrapper.show();

		// Add red emoji to tab title
		update_tab_title(frm, table_name, true);
	} else {
		// Hide warning
		field.$wrapper.hide();
		frm.set_df_property(field_name, 'hidden', 1);
		update_tab_title(frm, table_name, false);
	}
}

function update_tab_title(frm, table_name, has_error) {
	const tab_map = {
		'elave_1': 'Əlavə 1',
		'elave_2': 'Əlavə 2'
	};

	const base_title = tab_map[table_name];
	if (!base_title) return;

	// Find tab element and update title
	const tab_title = has_error ? `🔴 ${base_title}` : base_title;

	// Update tab title using jQuery/DOM
	setTimeout(() => {
		try {
			// Find all tabs and update the matching one
			$('.form-tabs .nav-link').each(function() {
				const $tab = $(this);
				const text = $tab.text().trim();

				// Check if this is the tab we want to update (with or without emoji)
				if (text === base_title || text === `🔴 ${base_title}` || text.includes(base_title)) {
					// Always set to the correct state (with or without emoji)
					$tab.text(tab_title);
					console.log(`Updated tab "${base_title}" to: "${tab_title}"`);
				}
			});
		} catch (e) {
			console.log('Could not update tab title:', e);
		}
	}, 200);
}

function highlight_invalid_cells(frm, invalid_rows_1, invalid_rows_2) {
	// Clear any existing highlights first
	setTimeout(() => {
		try {
			// Remove previous highlights from both tables - target the whole cell div
			$('[data-fieldname="elave_1"] [data-fieldname="hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri"]').css({
				'background-color': '',
				'border': '',
				'box-shadow': ''
			});
			$('[data-fieldname="elave_2"] [data-fieldname="hesabatilierzindeuçotaalınan"]').css({
				'background-color': '',
				'border': '',
				'box-shadow': ''
			});

			// Highlight Əlavə 1 invalid cells (503.2)
			if (invalid_rows_1.length > 0) {
				console.log('Highlighting Əlavə 1 invalid rows:', invalid_rows_1.map(r => r.name));
				invalid_rows_1.forEach(item => {
					// Use data-name instead of data-idx for accurate row matching
					const $cell = $(`[data-fieldname="elave_1"] .grid-row[data-name="${item.name}"] [data-fieldname="hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri"]`);
					console.log(`  Row ${item.name}: Found ${$cell.length} elements`);
					if ($cell.length > 0) {
						$cell.css({
							'background-color': '#ffe6e6',
							'border': '2px solid #ff0000'
						});
					}
				});
			}

			// Highlight Əlavə 2 invalid cells (503.1)
			if (invalid_rows_2.length > 0) {
				console.log('Highlighting Əlavə 2 invalid rows:', invalid_rows_2.map(r => r.name));
				invalid_rows_2.forEach(item => {
					// Use data-name instead of data-idx for accurate row matching
					const $cell = $(`[data-fieldname="elave_2"] .grid-row[data-name="${item.name}"] [data-fieldname="hesabatilierzindeuçotaalınan"]`);
					console.log(`  Row ${item.name}: Found ${$cell.length} elements`);
					if ($cell.length > 0) {
						$cell.css({
							'background-color': '#ffe6e6',
							'border': '2px solid #ff0000'
						});
					}
				});
			}
		} catch (e) {
			console.log('Could not highlight cells:', e);
		}
	}, 300);
}

// ==================== END VALIDATION ====================

// ==================== FORMULA 509.1 CALCULATION (TAM İL) ====================
// Calculate field 509.1 based on formula: ((501.1 + 504.1) / 2) * 1% + 505.1 * 1%

function calculate_509_1(frm) {
	// Only calculate when tam_il is checked
	if (!frm.doc.tam_il) {
		return;
	}

	// Get value from field 501.1 (manatla from vergi_hesab_1ci)
	let value_501_1 = 0;
	(frm.doc.vergi_hesab_1ci || []).forEach(row => {
		// Точное совпадение: после "501.1" должен быть пробел (не 501.1.1)
		if (row.göstəricilər && row.göstəricilər.startsWith('501.1 ')) {
			value_501_1 = flt(row.manatla);
		}
	});

	// Get value from field 504.1 (manatla from vergi_hesab_2ci)
	let value_504_1 = 0;
	(frm.doc.vergi_hesab_2ci || []).forEach(row => {
		// Точное совпадение: после "504.1" должен быть пробел (не 504.1.1)
		if (row.göstəricilər && row.göstəricilər.startsWith('504.1 ')) {
			value_504_1 = flt(row.manatla);
		}
	});

	// Get value from field 505.1 (sığorta from vergi_hesab_3cu)
	let value_505_1 = 0;
	(frm.doc.vergi_hesab_3cu || []).forEach(row => {
		if (row.göstəricilər && row.göstəricilər.startsWith('505.1 ')) {
			value_505_1 = flt(row.manatla);
		}
	});

	// Calculate: ((501.1 + 504.1) / 2) * 1% + 505.1 * 1%
	let result = ((value_501_1 + value_504_1) / 2) * 0.01 + value_505_1 * 0.01;

	// Set value to field 509.1 (manatla in vergi_hesab_5ci)
	(frm.doc.vergi_hesab_5ci || []).forEach(row => {
		// Точное совпадение: после "509.1" должен быть пробел
		if (row.göstəricilər && row.göstəricilər.startsWith('509.1 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', result);
		}
	});

	// Set the same value to field 511.1 (manatla in vergi_hesab_6ci)
	(frm.doc.vergi_hesab_6ci || []).forEach(row => {
		// Точное совпадение: после "511.1" должен быть пробел
		if (row.göstəricilər && row.göstəricilər.startsWith('511.1 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', result);
		}
	});
}

// ==================== FORMULA 509.2 CALCULATION (İL ƏRZİNDƏ) ====================
// Calculate field 509.2 based on formula: ((503.1 + 504.1) / 24 * 507) * 1% + 505.1 * 1%

function calculate_509_2(frm) {
	// Only calculate when il_erzinde is checked
	if (!frm.doc.il_erzinde) {
		return;
	}

	// Get value from field 507 (ayla from vergi_hesab_4cu_1 first row)
	let value_507 = 0;
	if (frm.doc.vergi_hesab_4cu_1 && frm.doc.vergi_hesab_4cu_1.length > 0) {
		value_507 = flt(frm.doc.vergi_hesab_4cu_1[0].ayla);
	}

	// Get value from field 503.1 (manatla from vergi_hesab_1ci_1)
	let value_503_1 = 0;
	(frm.doc.vergi_hesab_1ci_1 || []).forEach(row => {
		// Точное совпадение: после "503.1" должен быть пробел, а не точка (чтобы не совпадало с 503.1.1)
		if (row.göstəricilər && row.göstəricilər.startsWith('503.1 ')) {
			value_503_1 = flt(row.manatla);
		}
	});

	// Get value from field 504.1 (manatla from vergi_hesab_2ci)
	let value_504_1 = 0;
	(frm.doc.vergi_hesab_2ci || []).forEach(row => {
		// Точное совпадение: после "504.1" должен быть пробел, а не точка (чтобы не совпадало с 504.1.1)
		if (row.göstəricilər && row.göstəricilər.startsWith('504.1 ')) {
			value_504_1 = flt(row.manatla);
		}
	});

	// Get value from field 505.1 (sığorta from vergi_hesab_3cu)
	let value_505_1 = 0;
	(frm.doc.vergi_hesab_3cu || []).forEach(row => {
		if (row.göstəricilər && row.göstəricilər.startsWith('505.1 ')) {
			value_505_1 = flt(row.manatla);
		}
	});

	// Calculate: ((503.1 + 504.1) / 24 * 507) * 1% + 505.1 * 1%
	let result = ((value_503_1 + value_504_1) / 24 * value_507) * 0.01 + value_505_1 * 0.01;

	// Set value to field 509.2 (manatla in vergi_hesab_5ci)
	(frm.doc.vergi_hesab_5ci || []).forEach(row => {
		// Точное совпадение: после "509.2" должен быть пробел
		if (row.göstəricilər && row.göstəricilər.startsWith('509.2 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', result);
		}
	});

	// Set the same value to field 511.2 (manatla in vergi_hesab_6ci)
	(frm.doc.vergi_hesab_6ci || []).forEach(row => {
		// Точное совпадение: после "511.2" должен быть пробел
		if (row.göstəricilər && row.göstəricilər.startsWith('511.2 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', result);
		}
	});
}

// ==================== END FORMULA 509.2 ====================

// ==================== CALCULATE VERGI HESAB 3CU (INSURANCE TOTALS) ====================

function calculate_vergi_hesab_3cu_totals(frm) {
	// Sum insurance from elave_1 (tax-exempt) → 505.2
	// Exclude total row: "Vergidən azad olunan əmlakın CƏMİ dəyəri:"
	let sum_505_2 = 0;
	(frm.doc.elave_1 || []).forEach(row => {
		const azadolma = row.azadolmasəbəbi || '';
		if (azadolma !== 'Vergidən azad olunan əmlakın CƏMİ dəyəri:') {
			sum_505_2 += flt(row.artıqqiymətəəsasvəsaitlərindəyəri);
		}
	});

	// Sum insurance from elave_2 (taxable) → 505.1
	// Exclude total rows: "1. Binalar, tikililər və qurğular" and "Vergiyə cəlb olunan əmlakın CƏMİ dəyəri:"
	let sum_505_1 = 0;
	(frm.doc.elave_2 || []).forEach(row => {
		const category = row.vergiyəcəlbolunanəmlaklarınkateqoriyası || '';
		if (category !== '1. Binalar, tikililər və qurğular' &&
		    category !== 'Vergiyə cəlb olunan əmlakın CƏMİ dəyəri:') {
			sum_505_1 += flt(row.artıqqiymətəəsasvəsaitlərindəyəri505);
		}
	});

	// Set values in vergi_hesab_3cu
	(frm.doc.vergi_hesab_3cu || []).forEach(row => {
		if (row.göstəricilər && row.göstəricilər.startsWith('505.1 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', sum_505_1);
		} else if (row.göstəricilər && row.göstəricilər.startsWith('505.2 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', sum_505_2);
		} else if (row.göstəricilər && row.göstəricilər.startsWith('505 ')) {
			frappe.model.set_value(row.doctype, row.name, 'manatla', sum_505_1 + sum_505_2);
		}
	});
}

// ==================== END VERGI HESAB 3CU ====================

// Обработчики для дочерней таблицы Elave 2 - автоматический пересчет суммы binalar
frappe.ui.form.on('Property tax return Elave 2', {
	form_render: function(frm, cdt, cdn) {
		// Скрыть колонку при рендеринге формы строки
		toggle_field_readonly(frm);
	},

	// При изменении любого числового поля - пересчитать totals
	hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	ləğvolunmatarixinəəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	hesabatilierzindeuçotaalınan: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
		validate_minimum_asset_value(frm);
	},
	hesabatilinsonunaəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	artıqqiymətəəsasvəsaitlərindəyəri505: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},

	// При удалении строки - пересчитать
	elave_2_remove: function(frm, cdt, cdn) {
		calculate_binalar_totals(frm);
		calculate_elave_2_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	}
});

// Обработчики для дочерней таблицы Elave 1
frappe.ui.form.on('Property tax return Elave 1', {
	form_render: function(frm, cdt, cdn) {
		// Скрыть колонку при рендеринге формы строки
		toggle_field_readonly(frm);
	},

	// При изменении любого числового поля - пересчитать totals
	hesabatilininəvvəlinəəsasvəsaitlərinqalıqdəyərimanatla5012: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	ləğvolunmatarixinəəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	hesabatiliərzindəəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
		validate_minimum_asset_value(frm);
	},
	ilinsonunaəsasvəsaitlərinqalıqdəyəri: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},
	artıqqiymətəəsasvəsaitlərindəyəri: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	},

	// При удалении строки - пересчитать
	elave_1_remove: function(frm, cdt, cdn) {
		calculate_elave_1_totals(frm);
		calculate_vergi_hesab_3cu_totals(frm);
	}
});

// ==================== CHILD TABLE EVENT HANDLERS FOR 509.1 & 509.2 FORMULAS ====================

// Event handler for vergi_hesab_1ci changes (field 501 for 509.1 formula)
frappe.ui.form.on('Property tax return Emlak vergi hesablamasi 1ci cedvel', {
	manatla: function(frm, cdt, cdn) {
		calculate_509_1(frm);
	}
});

// Event handler for vergi_hesab_4cu_1 changes (field 507 for 509.2 formula)
frappe.ui.form.on('Property tax return Emlak vergi hesablamasi 4cu cedvel 1', {
	ayla: function(frm, cdt, cdn) {
		calculate_509_2(frm);
	}
});

// Event handler for vergi_hesab_1ci_1 changes (field 503.1 for 509.2 formula)
frappe.ui.form.on('Property tax return Emlak vergi hesablamasi 1ci cedvel 1', {
	manatla: function(frm, cdt, cdn) {
		calculate_509_2(frm);
	}
});

// Event handler for vergi_hesab_2ci changes (fields 504 for 509.1 and 504.1 for 509.2)
frappe.ui.form.on('Property tax return Emlak vergi hesablamasi 2ci cedvel', {
	manatla: function(frm, cdt, cdn) {
		calculate_509_1(frm);
		calculate_509_2(frm);
	}
});

// Event handler for vergi_hesab_3cu changes (field 505 - insurance)
frappe.ui.form.on('Property tax return Emlak vergi hesablamasi 3cu cedvel', {
	manatla: function(frm, cdt, cdn) {
		calculate_509_1(frm);
		calculate_509_2(frm);
	}
});