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

frappe.query_reports["VAT Allocation Tax Articles Report"] = {
	"filters": [
		{
			"fieldname": "company",
			"label": __("Company"),
			"fieldtype": "Link",
			"options": "Company",
			"default": frappe.defaults.get_user_default("Company"),
			"reqd": 0,
			"hidden": 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.startsWith("vm_")) {
			if (value && parseFloat(value) > 0) {
				let color = get_tax_article_color(column.fieldname);
				let icon = get_tax_article_icon(column.fieldname);

				value = `<span style="color: ${color}; font-weight: bold; background-color: ${color}15; padding: 2px 6px; border-radius: 3px; border-left: 2px solid ${color};">${icon} ${value}</span>`;
			} else if (value == 0 || !value) {
				value = `<span style="color: #ccc;">0.00</span>`;
			}
		}

		// Подсветка VAT Allocation колонки
		if (column.fieldname == "vat_allocation" && value) {
			value = `<span style="color: #495057; font-weight: bold;">📋 ${value}</span>`;
		}

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

		return value;
	},

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

		report.page.add_inner_button(__("Show Article Categories"), function() {
			show_tax_article_categories();
		});

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

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

// Функция определения цвета для налоговой статьи
function get_tax_article_color(fieldname) {
	if (fieldname.includes("165_1")) {
		// 165.1.x статьи - льготы (зеленая гамма)
		return "#198754";
	} else if (fieldname.includes("164_1_1")) {
		// 164.1.1-164.1.10 - государственные операции (синяя гамма)
		return "#0d6efd";
	} else if (fieldname.includes("164_1_2") || fieldname.includes("164_1_3")) {
		// Финансовые операции (фиолетовая гамма)
		return "#6610f2";
	} else if (fieldname.includes("164_1_4") || fieldname.includes("164_1_5") || fieldname.includes("164_1_6")) {
		// Специальные операции (индиго гамма)
		return "#6f42c1";
	} else if (fieldname.includes("164_1_7") || fieldname.includes("164_1_8")) {
		// Медиа и образование (голубая гамма)
		return "#0dcaf0";
	} else if (fieldname.includes("164_1_18") || fieldname.match(/164_1_2[7-9]/) || fieldname.match(/164_1_3[0-7]/)) {
		// Сельское хозяйство (зеленая гамма)
		return "#20c997";
	} else if (fieldname.includes("164_1_41")) {
		// Автомобили (оранжевая гамма)
		return "#fd7e14";
	} else if (fieldname.match(/164_1_4[2-9]/) || fieldname.match(/164_1_5[0-9]/)) {
		// Социальные и специальные услуги (розовая гамма)
		return "#d63384";
	} else {
		// Остальные статьи (серая гамма)
		return "#6c757d";
	}
}

// Функция определения иконки для налоговой статьи
function get_tax_article_icon(fieldname) {
	if (fieldname.includes("165_1")) {
		return "✅"; // Льготы
	} else if (fieldname.includes("164_1_1")) {
		return "🏛️"; // Государственные
	} else if (fieldname.includes("164_1_2") || fieldname.includes("164_1_3")) {
		return "💰"; // Финансовые
	} else if (fieldname.includes("164_1_7") || fieldname.includes("164_1_8")) {
		return "📚"; // Медиа и образование
	} else if (fieldname.includes("164_1_18") || fieldname.match(/164_1_2[7-9]/) || fieldname.match(/164_1_3[0-7]/)) {
		return "🌾"; // Сельское хозяйство
	} else if (fieldname.includes("164_1_41")) {
		return "🚗"; // Автомобили
	} else if (fieldname.match(/164_1_4[2-9]/) || fieldname.match(/164_1_5[0-9]/)) {
		return "🏥"; // Социальные услуги
	} else {
		return "📋"; // Остальные
	}
}

// Функция показа информации о налоговых статьях
function show_tax_articles_info() {
	let info_html = '<div class="tax-articles-info">';
	info_html += '<h4 style="color: #495057; margin-bottom: 15px;">📋 Vergi Məcəlləsi Maddələri</h4>';

	info_html += '<div class="row">';
	info_html += '<div class="col-md-6">';
	info_html += '<h5 style="color: #198754; margin-bottom: 10px;">✅ 165.1.x Maddələri (Azadolmalar)</h5>';
	info_html += '<ul style="font-size: 12px; color: #6c757d;">';
	info_html += '<li>165.1.1 - Əsas azadolmalar</li>';
	info_html += '<li>165.1.2 - Xüsusi azadolmalar</li>';
	info_html += '<li>165.1.3 - İxrac əməliyyatları</li>';
	info_html += '<li>165.1.4, 165.1.5 - Digər azadolmalar</li>';
	info_html += '<li>165.1.9-165.1.11 - Əlavə azadolmalar</li>';
	info_html += '</ul>';
	info_html += '</div>';

	info_html += '<div class="col-md-6">';
	info_html += '<h5 style="color: #0d6efd; margin-bottom: 10px;">🏛️ 164.1.x Maddələri (Dövlət)</h5>';
	info_html += '<ul style="font-size: 12px; color: #6c757d;">';
	info_html += '<li>164.1.1-164.1.10 - Dövlət əməliyyatları</li>';
	info_html += '<li>164.1.18-164.1.37 - Kənd təsərrüfatı</li>';
	info_html += '<li>164.1.41 seriyası - Avtomobillər</li>';
	info_html += '<li>164.1.42-164.1.59 - Sosial xidmətlər</li>';
	info_html += '</ul>';
	info_html += '</div>';
	info_html += '</div>';

	info_html += '<hr>';
	info_html += '<p style="color: #6c757d; font-size: 13px; text-align: center;">';
	info_html += 'Bu hesabat VAT Allocation sales invoice table-də tax_article və allocated_amount sahələrinə əsasən bölüşdürmə məbləğlərini göstərir';
	info_html += '</p>';

	info_html += '</div>';

	frappe.msgprint({
		title: __("Tax Articles Information"),
		message: info_html,
		wide: true
	});
}

// Функция показа категорий налоговых статей
function show_tax_article_categories() {
	let categories_html = '<div class="tax-article-categories">';
	categories_html += '<h4>🎯 Vergi Məcəlləsi Kateqoriyaları:</h4>';
	categories_html += '<div class="row">';

	const categories = [
		{name: "✅ Azadolmalar", color: "#198754", articles: ["165.1.1", "165.1.2", "165.1.3", "165.1.4", "165.1.5"]},
		{name: "🏛️ Dövlət Əməliyyatları", color: "#0d6efd", articles: ["164.1.1", "164.1.10", "164.1.11", "164.1.12", "164.1.48"]},
		{name: "💰 Maliyyə", color: "#6610f2", articles: ["164.1.2", "164.1.3", "164.1.36", "164.1.55"]},
		{name: "📚 Təhsil və Media", color: "#0dcaf0", articles: ["164.1.7", "164.1.8", "164.1.13"]},
		{name: "🌾 Kənd Təsərrüfatı", color: "#20c997", articles: ["164.1.18", "164.1.27", "164.1.29-37"]},
		{name: "🚗 Avtomobillər", color: "#fd7e14", articles: ["164.1.41", "164.1.41-1", "164.1.41-2", "164.1.41-3"]},
		{name: "🏥 Sosial Xidmətlər", color: "#d63384", articles: ["164.1.51", "164.1.58", "164.1.42"]}
	];

	categories.forEach((category, index) => {
		if (index % 2 === 0 && index > 0) {
			categories_html += '</div><div class="row">';
		}

		categories_html += '<div class="col-md-6" style="margin-bottom: 15px;">';
		categories_html += `<div style="padding: 15px; border: 2px solid ${category.color}; border-radius: 8px; background: ${category.color}10;">`;
		categories_html += `<h5 style="color: ${category.color};">${category.name}</h5>`;
		categories_html += '<div style="font-size: 12px; color: #6c757d;">';
		category.articles.forEach(article => {
			categories_html += `<span style="margin-right: 8px; background: white; padding: 2px 6px; border-radius: 3px; border: 1px solid ${category.color};">VM ${article}</span>`;
		});
		categories_html += '</div>';
		categories_html += '</div>';
		categories_html += '</div>';
	});

	categories_html += '</div>';
	categories_html += '</div>';

	frappe.msgprint({
		title: __("Article Categories"),
		message: categories_html,
		wide: true
	});
}

// Функция экспорта сводки по налоговым статьям
function export_tax_articles_summary(report) {
	let data = report.data;
	let summary = calculate_tax_articles_totals(data);

	// Создаем CSV с итогами
	let csv_content = "Tax Article,Allocated Amount,Documents Count\n";

	summary.forEach(item => {
		if (item.total > 0) {
			csv_content += `"${item.article}",${item.total},${item.count}\n`;
		}
	});

	// Добавляем общие итоги
	let grand_total = summary.reduce((acc, item) => acc + item.total, 0);
	let total_docs = data.length;

	csv_content += `\n"CƏMİ","${grand_total}","${total_docs}"\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 = 'vat_allocation_tax_articles_summary_' + frappe.datetime.get_today() + '.csv';
	document.body.appendChild(a);
	a.click();
	document.body.removeChild(a);
	window.URL.revokeObjectURL(url);

	frappe.show_alert({message: __("Tax articles summary exported successfully"), indicator: "green"});
}

// Функция расчета итогов по налоговым статьям
function calculate_tax_articles_totals(data) {
	let summary = [];
	let article_totals = {};

	// Получаем все возможные статьи из колонок
	data.forEach(row => {
		Object.keys(row).forEach(key => {
			if (key.startsWith('vm_') && row[key] > 0) {
				if (!article_totals[key]) {
					article_totals[key] = {total: 0, count: 0};
				}
				article_totals[key].total += row[key];
				article_totals[key].count++;
			}
		});
	});

	// Конвертируем в массив
	Object.keys(article_totals).forEach(key => {
		summary.push({
			article: convert_field_key_to_display_name(key),
			total: article_totals[key].total,
			count: article_totals[key].count
		});
	});

	// Сортируем по общей сумме
	summary.sort((a, b) => b.total - a.total);

	return summary;
}

// Функция конвертации ключа поля в отображаемое название
function convert_field_key_to_display_name(fieldKey) {
	const mapping = {
		'vm_165_1_1': 'VM 165.1.1',
		'vm_165_1_2': 'VM 165.1.2',
		'vm_165_1_3': 'VM 165.1.3',
		'vm_165_1_3_export': 'VM 165.1.3 (İxrac)',
		'vm_165_1_3_services': 'VM 165.1.3 (Xidmət)',
		'vm_164_1_1': 'VM 164.1.1',
		'vm_164_1_2': 'VM 164.1.2',
		'vm_164_1_18': 'VM 164.1.18',
		'vm_164_1_27': 'VM 164.1.27',
		'vm_164_1_41': 'VM 164.1.41'
		// Можно добавить больше маппингов по мере необходимости
	};

	return mapping[fieldKey] || fieldKey.replace(/_/g, '.').replace('vm.', 'VM ');
}

// Функция добавления статистики под таблицу
function add_tax_articles_statistics(datatable_obj) {
	if (datatable_obj && datatable_obj.data) {
		let summary = calculate_tax_articles_totals(datatable_obj.data);
		let topArticles = summary.slice(0, 10); // Топ 10 статей

		let stats_html = '<div class="tax-articles-statistics" style="margin-top: 20px; padding: 20px; background: linear-gradient(135deg, #f8f9ff 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> Vergi Maddələri üzrə Statistika:</h4>';

		// Топ статьи
		if (topArticles.length > 0) {
			stats_html += '<h5 style="color: #495057; margin-bottom: 15px;">🏆 Ən Yüksək Bölüşdürmə Məbləğli Maddələr:</h5>';
			stats_html += '<div class="row">';

			topArticles.slice(0, 6).forEach((article, index) => {
				if (index % 3 === 0 && index > 0) {
					stats_html += '</div><div class="row">';
				}

				let color = get_tax_article_color(Object.keys(datatable_obj.data[0]).find(k => convert_field_key_to_display_name(k) === article.article) || 'vm_other');

				stats_html += '<div class="col-md-4" style="margin-bottom: 10px;">';
				stats_html += `<div style="padding: 10px; border: 2px solid ${color}; border-radius: 6px; background: white; text-align: center;">`;
				stats_html += `<strong style="color: ${color}; font-size: 12px;">${article.article}</strong><br>`;
				stats_html += `<span style="font-size: 16px; font-weight: bold; color: ${color};">${article.total.toFixed(2)}</span><br>`;
				stats_html += `<small style="color: #6c757d;">${article.count} sənəd</small>`;
				stats_html += '</div>';
				stats_html += '</div>';
			});

			stats_html += '</div>';
		}

		// Общие итоги
		let grand_total = summary.reduce((acc, item) => acc + item.total, 0);
		let total_articles = summary.length;
		let total_docs = datatable_obj.data.length;

		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;">📋 Aktiv Maddələr<br><span style="font-size: 18px;">${total_articles}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #198754; font-size: 14px; font-weight: bold;">💰 Ümumi Məbləğ<br><span style="font-size: 18px;">${grand_total.toFixed(2)}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #fd7e14; font-size: 14px; font-weight: bold;">📄 Cəmi Sənəd<br><span style="font-size: 18px;">${total_docs}</span></span></div>`;
		stats_html += `<div class="col-md-3"><span style="color: #d63384; font-size: 14px; font-weight: bold;">📈 Orta Məbləğ<br><span style="font-size: 18px;">${total_docs > 0 ? (grand_total / total_docs).toFixed(2) : '0.00'}</span></span></div>`;
		stats_html += '</div>';
		stats_html += '</div>';

		stats_html += '</div>';

		// Удаляем предыдущую статистику если есть
		$('.tax-articles-statistics').remove();

		// Добавляем новую статистику
		$(stats_html).insertAfter('.datatable');
	}
}
