// Copyright (c) 2024, Your Company and contributors
// For license information, please see license.txt

frappe.query_reports["Tax Exempt Assets Establishment Year Report"] = {
	"filters": [
		{
			"fieldname": "company",
			"label": __("Company"),
			"fieldtype": "Link",
			"options": "Company",
			"default": frappe.defaults.get_user_default("Company"),
			"reqd": 1,
		},
		{
			"fieldname": "from_date",
			"label": __("From Date"),
			"fieldtype": "Date",
			"default": frappe.datetime.add_months(frappe.datetime.get_today(), -1),
			"reqd": 1,
		},
		{
			"fieldname": "to_date",
			"label": __("To Date"),
			"fieldtype": "Date",
			"default": frappe.datetime.get_today(),
			"reqd": 1,
		}
	],

	"formatter": function (value, row, column, data, default_formatter) {
		value = default_formatter(value, row, column, data);

		// Подсветка колонок с остатками и страховкой
		if (column.fieldname && column.fieldname.includes("value_")) {
			if (value && parseFloat(value) > 0) {
				// Разные цвета для разных типов колонок - специальные для tax exempt
				let color = "#28a745"; // зеленый по умолчанию
				
				if (column.fieldname.includes("_value_from")) {
					color = "#6610f2"; // фиолетовый для начальных остатков
				} else if (column.fieldname.includes("_value_to")) {
					color = "#198754"; // темно-зеленый для конечных остатков
				} else if (column.fieldname.includes("_insured")) {
					color = "#d63384"; // розовый для страховки
				}
				
				value = `<span style="color: ${color}; font-weight: bold; background-color: ${color}20; padding: 3px 8px; border-radius: 4px; border-left: 3px solid ${color};">${value}</span>`;
			} else if (value == 0 || !value) {
				value = `<span style="color: #ccc;">0.00</span>`;
			}
		}

		// Подсветка Asset колонки - специальная для tax exempt establishment year
		if (column.fieldname == "asset" && value) {
			value = `<span style="color: #6610f2; font-weight: bold; background-color: #6610f215; padding: 2px 6px; border-radius: 3px;">⚖️ ${value}</span>`;
		}

		// Подсветка Date колонки
		if (column.fieldname == "purchase_date" && value) {
			value = `<span style="color: #d63384; font-weight: 600;">📅 ${value}</span>`;
		}

		return value;
	},

	"onload": function(report) {
		// Добавляем кастомные кнопки
		report.page.add_inner_button(__("Export Tax Exempt Summary"), function() {
			export_tax_exempt_establishment_year_summary(report);
		});

		report.page.add_inner_button(__("Show Tax Articles"), function() {
			show_tax_articles_info();
		});

		// Добавляем информационное сообщение
		report.page.add_inner_button(__("About This Report"), function() {
			show_tax_exempt_report_info(report);
		});
	},

	"after_datatable_render": function(datatable_obj) {
		// Добавляем итоговую статистику
		setTimeout(() => {
			add_tax_exempt_establishment_year_statistics(datatable_obj);
		}, 500);
	}
};

// Функция показа информации об отчете
function show_tax_exempt_report_info(report) {
	let company = report.filters.find(f => f.fieldname === 'company').value;
	
	if (company) {
		frappe.call({
			method: 'frappe.client.get_value',
			args: {
				doctype: 'Company',
				fieldname: 'date_of_establishment',
				filters: {name: company}
			},
			callback: function(r) {
				let establishment_date = r.message ? r.message.date_of_establishment : 'N/A';
				let establishment_year = establishment_date !== 'N/A' ? new Date(establishment_date).getFullYear() : 'N/A';
				
				frappe.msgprint({
					title: __("Tax Exempt Establishment Year Report Information"),
					message: `
						<div style="padding: 15px;">
							<h4 style="color: #6610f2; margin-bottom: 15px;">⚖️ Vergidən azad olunan əsas vəsaitlər - Təsis ili</h4>
							<hr>
							<p><strong>Şirkət:</strong> ${company}</p>
							<p><strong>Təsis tarixi:</strong> ${establishment_date}</p>
							<p><strong>Təsis ili:</strong> ${establishment_year}</p>
							<hr>
							<p style="color: #6c757d; margin-bottom: 10px;">
								<strong>Bu hesabat göstərir:</strong><br>
								• Yalnız şirkətin təsis ilində alınmış aktivləri<br>
								• Vergidən azad olunan əsas vəsaitlər tipində olanları<br>
								• Tax exempt maddələr üzrə qalıqlar və sığorta dəyəri<br>
								• Vergi Məcəlləsinin 199, 227 maddələri və beynəlxalq müqavilələr
							</p>
						</div>
					`,
					wide: true
				});
			}
		});
	} else {
		frappe.msgprint(__('Please select a company first'));
	}
}

// Функция экспорта сводки по налоговым статьям года создания
function export_tax_exempt_establishment_year_summary(report) {
	let data = report.data;
	let summary = calculate_tax_totals(data);
	
	// Создаем CSV с итогами по налоговым статьям года создания
	let csv_content = "Tax Article (Establishment Year),Assets Count,Total Value From,Total Value To,Total Insured Value\n";
	
	summary.forEach(item => {
		csv_content += `"${item.article}",${item.assets_count},${item.total_value_from},${item.total_value_to},${item.total_insured}\n`;
	});
	
	// Добавляем общие итоги
	let totals = summary.reduce((acc, item) => {
		acc.total_assets += item.assets_count;
		acc.total_value_from += item.total_value_from;
		acc.total_value_to += item.total_value_to;
		acc.total_insured += item.total_insured;
		return acc;
	}, {total_assets: 0, total_value_from: 0, total_value_to: 0, total_insured: 0});
	
	csv_content += `\n"TOTAL (TAX EXEMPT ESTABLISHMENT YEAR)",${totals.total_assets},${totals.total_value_from},${totals.total_value_to},${totals.total_insured}\n`;
	
	// Скачиваем файл
	let blob = new Blob([csv_content], { type: 'text/csv;charset=utf-8' });
	let url = window.URL.createObjectURL(blob);
	let a = document.createElement('a');
	a.href = url;
	a.download = 'tax_exempt_assets_establishment_year_' + frappe.datetime.get_today() + '.csv';
	document.body.appendChild(a);
	a.click();
	document.body.removeChild(a);
	window.URL.revokeObjectURL(url);
	
	frappe.show_alert({message: __("Tax exempt establishment year summary exported successfully"), indicator: "green"});
}

// Функция расчета итогов по налоговым статьям
function calculate_tax_totals(data) {
	let tax_articles = get_tax_articles_list();
	let summary = [];
	
	tax_articles.forEach(article => {
		let article_key = get_field_key_js(article.full_name);
		let assets_count = 0;
		let total_value_from = 0;
		let total_value_to = 0;
		let total_insured = 0;
		
		data.forEach(row => {
			let value_from = row[`${article_key}_value_from`] || 0;
			let value_to = row[`${article_key}_value_to`] || 0;
			let insured = row[`${article_key}_insured`] || 0;
			
			if (value_from > 0 || value_to > 0 || insured > 0) {
				assets_count++;
				total_value_from += value_from;
				total_value_to += value_to;
				total_insured += insured;
			}
		});
		
		if (assets_count > 0) {
			summary.push({
				article: article.short_name,
				assets_count: assets_count,
				total_value_from: total_value_from,
				total_value_to: total_value_to,
				total_insured: total_insured
			});
		}
	});
	
	return summary;
}

// Функция показа информации о налоговых статьях
function show_tax_articles_info() {
	let tax_articles = get_tax_articles_list();
	let info_html = '<div class="tax-articles-info">';
	info_html += '<h4>⚖️ Təsis ilində alınmış vergidən azad olunan aktivlərin vergi maddələri:</h4>';
	info_html += '<div class="row">';
	
	tax_articles.forEach((article, index) => {
		if (index % 2 === 0 && index > 0) {
			info_html += '</div><div class="row">';
		}
		
		info_html += '<div class="col-md-6" style="margin-bottom: 8px;">';
		info_html += `<strong>${article.short_name}:</strong><br>`;
		info_html += `<small style="color: #6c757d;">${article.full_name}</small>`;
		info_html += '</div>';
	});
	
	info_html += '</div></div>';
	
	frappe.msgprint({
		title: __("Tax Articles Information"),
		message: info_html,
		wide: true
	});
}

// Функция добавления статистики под таблицу
function add_tax_exempt_establishment_year_statistics(datatable_obj) {
	if (datatable_obj && datatable_obj.data) {
		let summary = calculate_tax_totals(datatable_obj.data);
		
		let stats_html = '<div class="tax-exempt-establishment-year-statistics" style="margin-top: 20px; padding: 20px; background: linear-gradient(135deg, #f8f5ff 0%, #fff 100%); border-radius: 8px; border: 2px solid #6610f2; box-shadow: 0 2px 8px rgba(102,16,242,0.1);">';
		stats_html += '<h4 style="margin-bottom: 15px; color: #6610f2; display: flex; align-items: center;"><span style="margin-right: 8px;">⚖️</span> Təsis ili üzrə vergidən azad olunan əsas vəsaitlər:</h4>';
		
		// Группируем по типам статей
		let grouped_summary = group_summary_by_tax_article_type(summary);
		
		Object.keys(grouped_summary).forEach(group_name => {
			stats_html += `<h5 style="margin-top: 15px; margin-bottom: 10px; color: #d63384;">${group_name}</h5>`;
			stats_html += '<div class="row">';
			
			grouped_summary[group_name].forEach((item, index) => {
				if (index % 2 === 0 && index > 0) {
					stats_html += '</div><div class="row">';
				}
				
				stats_html += '<div class="col-md-6" style="margin-bottom: 10px;">';
				stats_html += `<div style="padding: 12px; border: 2px solid #e9ecef; border-left: 4px solid #6610f2; border-radius: 6px; background: white; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">`;
				stats_html += `<strong style="color: #6610f2;">${item.article}</strong><br>`;
				stats_html += `<small style="color: #6c757d;">Aktivlər: <strong>${item.assets_count}</strong> | Başlanğıc: <strong>${item.total_value_from.toFixed(2)}</strong> | Son: <strong>${item.total_value_to.toFixed(2)}</strong> | Sığorta: <strong>${item.total_insured.toFixed(2)}</strong></small>`;
				stats_html += `</div>`;
				stats_html += '</div>';
			});
			
			stats_html += '</div>';
		});
		
		// Общие итоги
		let totals = summary.reduce((acc, item) => {
			acc.total_assets += item.assets_count;
			acc.total_value_from += item.total_value_from;
			acc.total_value_to += item.total_value_to;
			acc.total_insured += item.total_insured;
			return acc;
		}, {total_assets: 0, total_value_from: 0, total_value_to: 0, total_insured: 0});
		
		stats_html += `<div style="margin-top: 20px; padding: 15px; border-top: 3px solid #6610f2; background: linear-gradient(135deg, #6610f210 0%, #fff 100%);">`;
		stats_html += `<div class="row text-center">`;
		stats_html += `<div class="col-md-3"><span style="color: #6610f2; font-size: 14px; font-weight: bold;">⚖️ Cəmi aktivlər<br><span style="font-size: 18px;">${totals.total_assets}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #6610f2; font-size: 14px; font-weight: bold;">💰 Başlanğıc qalıq<br><span style="font-size: 18px;">${totals.total_value_from.toFixed(2)}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #198754; font-size: 14px; font-weight: bold;">💎 Son qalıq<br><span style="font-size: 18px;">${totals.total_value_to.toFixed(2)}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #d63384; font-size: 14px; font-weight: bold;">🛡️ Ümumi sığorta<br><span style="font-size: 18px;">${totals.total_insured.toFixed(2)}</span></span></div>`;
		stats_html += `</div>`;
		stats_html += `</div>`;
		
		stats_html += '</div>';
		
		// Удаляем предыдущую статистику если есть
		$('.tax-exempt-establishment-year-statistics').remove();
		
		// Добавляем новую статистику
		$(stats_html).insertAfter('.datatable');
	}
}

// Группировка статей по типам
function group_summary_by_tax_article_type(summary) {
	let grouped = {
		'Maddə 199.1 (Azaldılmalı)': [],
		'Maddə 199.4 (İstisnalar)': [],
		'Maddə 199.5-199.20 (Xüsusi)': [],
		'Maddə 227.1 (Digər)': [],
		'Beynəlxalq müqavilələr': []
	};
	
	summary.forEach(item => {
		if (item.article.includes('199.1')) {
			grouped['Maddə 199.1 (Azaldılmalı)'].push(item);
		} else if (item.article.includes('199.4')) {
			grouped['Maddə 199.4 (İstisnalar)'].push(item);
		} else if (item.article.match(/199\.(5|7|8|9|11|14|15|16|17|18|19|20)/)) {
			grouped['Maddə 199.5-199.20 (Xüsusi)'].push(item);
		} else if (item.article.includes('227.1')) {
			grouped['Maddə 227.1 (Digər)'].push(item);
		} else {
			grouped['Beynəlxalq müqavilələr'].push(item);
		}
	});
	
	// Удаляем пустые группы
	Object.keys(grouped).forEach(key => {
		if (grouped[key].length === 0) {
			delete grouped[key];
		}
	});
	
	return grouped;
}

// Вспомогательные функции

function get_tax_articles_list() {
	return [
		{short_name: "199.1 (Azaldılmalı)", full_name: "Vergi Məcəlləsinin 199.1-ci maddəsinə əsasən, azaldılmalı əmlak vergisinin məbləği"},
		{short_name: "199.4.1", full_name: "Vergi Məcəlləsinin 199.4.1-ci maddəsinə əsasən"},
		{short_name: "199.4.2", full_name: "Vergi Məcəlləsinin 199.4.2-ci maddəsinə əsasən"},
		{short_name: "199.4.3", full_name: "Vergi Məcəlləsinin 199.4.3-cü maddəsinə əsasən"},
		{short_name: "199.4.4", full_name: "Vergi Məcəlləsinin 199.4.4-cü maddəsinə əsasən"},
		{short_name: "199.4.1-1", full_name: "Vergi Məcəlləsinin 199.4.1-1-ci madacdəsinə əsasən"},
		{short_name: "199.5", full_name: "Vergi Məcəlləsinin 199.5-ci maddəsinə əsasən"},
		{short_name: "199.7", full_name: "Vergi Məcəlləsinin 199.7-ci maddəsinə əsasən"},
		{short_name: "199.8", full_name: "Vergi Məcəlləsinin 199.8-ci maddəsinə əsasən"},
		{short_name: "199.9", full_name: "Vergi Məcəlləsinin 199.9-cu maddəsinə əsasən"},
		{short_name: "199.11", full_name: "Vergi Məcəlləsinin 199.11-ci maddəsinə əsasən"},
		{short_name: "199.14", full_name: "Vergi Məcəlləsinin 199.14-cü maddəsinə əsasən"},
		{short_name: "199.15", full_name: "Vergi Məcəlləsinin 199.15-ci maddəsinə əsasən"},
		{short_name: "199.16", full_name: "Vergi Məcəlləsinin 199.16-cı maddəsinə əsasən"},
		{short_name: "199.17", full_name: "Vergi Məcəlləsinin 199.17-ci maddəsinə əsasən"},
		{short_name: "199.18", full_name: "Vergi Məcəlləsinin 199.18-ci maddəsinə əsasən"},
		{short_name: "199.19", full_name: "Vergi Məcəlləsinin 199.19-cu maddəsinə əsasən"},
		{short_name: "199.20", full_name: "Vergi Məcəlləsinin 199.20-ci maddəsinə əsasən"},
		{short_name: "227.1", full_name: "Vergi Məcəlləsinin 227.1-ci maddəsinə əsasən"},
		{short_name: "Pay Bölgüsü", full_name: "Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlarda, o cümlədən neft və qaz haqqında, ixrac məqsədli neft-qaz fəaliyyəti üzrə"},
		{short_name: "İqtisadi Zonalar", full_name: "Xüsusi iqtisadi zonalar haqqında qanunlarda nəzərdə tutulan əmlaklar üzrə"},
		{short_name: "Beynəlxalq", full_name: "Azərbaycan Respublikasının tərəfdar çıxdığı beynəlxalq müqavilələr üzrə"}
	];
}

function get_field_key_js(tax_article) {
	// Дублируем логику из Python для создания ключей полей
	if (!tax_article) {
		return "unknown";
	}
	
	if (tax_article.includes("199.1-ci") && tax_article.includes("azaldılmalı")) {
		return "article_199_1_reduced";
	} else if (tax_article.includes("199.4.1-1-ci")) {
		return "article_199_4_1_1";
	} else if (tax_article.includes("199.4.1-ci")) {
		return "article_199_4_1";
	} else if (tax_article.includes("199.4.2-ci")) {
		return "article_199_4_2";
	} else if (tax_article.includes("199.4.3-cü")) {
		return "article_199_4_3";
	} else if (tax_article.includes("199.4.4-cü")) {
		return "article_199_4_4";
	} else if (tax_article.includes("199.5-ci")) {
		return "article_199_5";
	} else if (tax_article.includes("199.7-ci")) {
		return "article_199_7";
	} else if (tax_article.includes("199.8-ci")) {
		return "article_199_8";
	} else if (tax_article.includes("199.9-cu")) {
		return "article_199_9";
	} else if (tax_article.includes("199.11-ci")) {
		return "article_199_11";
	} else if (tax_article.includes("199.14-cü")) {
		return "article_199_14";
	} else if (tax_article.includes("199.15-ci")) {
		return "article_199_15";
	} else if (tax_article.includes("199.16-cı")) {
		return "article_199_16";
	} else if (tax_article.includes("199.17-ci")) {
		return "article_199_17";
	} else if (tax_article.includes("199.18-ci")) {
		return "article_199_18";
	} else if (tax_article.includes("199.19-cu")) {
		return "article_199_19";
	} else if (tax_article.includes("199.20-ci")) {
		return "article_199_20";
	} else if (tax_article.includes("227.1-ci")) {
		return "article_227_1";
	} else if (tax_article.includes("pay bölgüsü")) {
		return "article_profit_sharing";
	} else if (tax_article.includes("iqtisadi zonalar")) {
		return "article_economic_zones";
	} else if (tax_article.includes("beynəlxalq müqavilələr")) {
		return "article_international";
	} else {
		return "article_other";
	}
}