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

frappe.query_reports["Taxable 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) {
				// Разные цвета для разных типов колонок - более яркие для establishment year
				let color = "#28a745"; // зеленый по умолчанию
				
				if (column.fieldname.includes("_value_from")) {
					color = "#007bff"; // синий для начальных остатков (ярче)
				} else if (column.fieldname.includes("_value_to")) {
					color = "#28a745"; // зеленый для конечных остатков
				} else if (column.fieldname.includes("_insured")) {
					color = "#fd7e14"; // оранжевый для страховки (ярче)
				}
				
				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 колонки - специальная для establishment year
		if (column.fieldname == "asset" && value) {
			value = `<span style="color: #dc3545; font-weight: bold; background-color: #dc354515; padding: 2px 6px; border-radius: 3px;">🏢 ${value}</span>`;
		}

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

		return value;
	},

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

		report.page.add_inner_button(__("Show Asset Types"), function() {
			show_asset_types_info();
		});

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

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

// Функция показа информации об отчете
function show_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: __("Establishment Year Report Information"),
					message: `
						<div style="padding: 15px;">
							<h4 style="color: #dc3545; margin-bottom: 15px;">📋 Vergiyə cəlb 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>
								• Vergiyə cəlb olunan əsas vəsaitlər tipində olanları<br>
								• Seçilmiş dövr üzrə qalıqlar və sığorta dəyəri
							</p>
						</div>
					`,
					wide: true
				});
			}
		});
	} else {
		frappe.msgprint(__('Please select a company first'));
	}
}

// Функция экспорта сводки по типам активов года создания
function export_establishment_year_summary(report) {
	let data = report.data;
	let summary = calculate_asset_type_totals(data);
	
	// Создаем CSV с итогами по типам активов года создания
	let csv_content = "Asset Type (Establishment Year),Assets Count,Total Value From,Total Value To,Total Insured Value\n";
	
	summary.forEach(item => {
		csv_content += `"${item.asset_type}",${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 (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 = 'taxable_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: __("Establishment year summary exported successfully"), indicator: "green"});
}

// Функция расчета итогов по типам активов
function calculate_asset_type_totals(data) {
	let asset_types = get_asset_types_list();
	let summary = [];
	
	asset_types.forEach(asset_type => {
		let asset_type_key = get_field_key_js(asset_type.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[`${asset_type_key}_value_from`] || 0;
			let value_to = row[`${asset_type_key}_value_to`] || 0;
			let insured = row[`${asset_type_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({
				asset_type: asset_type.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_asset_types_info() {
	let asset_types = get_asset_types_list();
	let info_html = '<div class="asset-types-info">';
	info_html += '<h4>🏢 Təsis ilində alınmış vergiyə cəlb olunan əsas vəsaitlər:</h4>';
	info_html += '<div class="row">';
	
	asset_types.forEach((asset_type, 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>${asset_type.short_name}:</strong><br>`;
		info_html += `<small style="color: #6c757d;">${asset_type.full_name}</small>`;
		info_html += '</div>';
	});
	
	info_html += '</div></div>';
	
	frappe.msgprint({
		title: __("Asset Types Information"),
		message: info_html,
		wide: true
	});
}

// Функция добавления статистики под таблицу
function add_establishment_year_statistics(datatable_obj) {
	if (datatable_obj && datatable_obj.data) {
		let summary = calculate_asset_type_totals(datatable_obj.data);
		
		let stats_html = '<div class="establishment-year-statistics" style="margin-top: 20px; padding: 20px; background: linear-gradient(135deg, #fff5f5 0%, #fff 100%); border-radius: 8px; border: 2px solid #dc3545; box-shadow: 0 2px 8px rgba(220,53,69,0.1);">';
		stats_html += '<h4 style="margin-bottom: 15px; color: #dc3545; display: flex; align-items: center;"><span style="margin-right: 8px;">🏢</span> Təsis ili üzrə vergiyə cəlb olunan əsas vəsaitlər:</h4>';
		
		// Группируем по типам активов
		let grouped_summary = group_summary_by_asset_category(summary);
		
		Object.keys(grouped_summary).forEach(group_name => {
			stats_html += `<h5 style="margin-top: 15px; margin-bottom: 10px; color: #6f42c1;">${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 #dc3545; border-radius: 6px; background: white; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">`;
				stats_html += `<strong style="color: #dc3545;">${item.asset_type}</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 #dc3545; background: linear-gradient(135deg, #dc354510 0%, #fff 100%);">`;
		stats_html += `<div class="row text-center">`;
		stats_html += `<div class="col-md-3"><span style="color: #dc3545; 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: #007bff; 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: #28a745; 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: #fd7e14; 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>';
		
		// Удаляем предыдущую статистику если есть
		$('.establishment-year-statistics').remove();
		
		// Добавляем новую статистику
		$(stats_html).insertAfter('.datatable');
	}
}

// Группировка активов по категориям
function group_summary_by_asset_category(summary) {
	let grouped = {
		'Binalar və tikililər': [],
		'Yaşayış sahələri': [],
		'Qeyri-yaşayış sahələri': [],
		'Maşın və avadanlıqlar': [],
		'Nəqliyyat və texnika': [],
		'Digər aktivlər': []
	};
	
	summary.forEach(item => {
		if (item.asset_type.includes('Binalar') || item.asset_type.includes('Qurğular')) {
			grouped['Binalar və tikililər'].push(item);
		} else if (item.asset_type.includes('Yaşayış') || item.asset_type.includes('Mənzillər')) {
			grouped['Yaşayış sahələri'].push(item);
		} else if (item.asset_type.includes('Qeyri-yaşayış') || item.asset_type.includes('Kompleks')) {
			grouped['Qeyri-yaşayış sahələri'].push(item);
		} else if (item.asset_type.includes('Maşın') || item.asset_type.includes('Texnologiya')) {
			grouped['Maşın və avadanlıqlar'].push(item);
		} else if (item.asset_type.includes('Nəqliyyat')) {
			grouped['Nəqliyyat və texnika'].push(item);
		} else {
			grouped['Digər aktivlər'].push(item);
		}
	});
	
	// Удаляем пустые группы
	Object.keys(grouped).forEach(key => {
		if (grouped[key].length === 0) {
			delete grouped[key];
		}
	});
	
	return grouped;
}

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

function get_asset_types_list() {
	return [
		// {short_name: "Binalar və Qurğular", full_name: "Binalar, tikililər və qurğular"},
		{short_name: "Çoxmərtəbəli Binaları", full_name: "Çoxmərtəbəli (çoxmənzilli) yaşayış binalar"},
		{short_name: "Qeyri-yaşayış Binaları", full_name: "Qeyri-yaşayış binaları (sahələri)"},
		{short_name: "Əmlak Kompleksləri", full_name: "Əmlak kompleksi kimi müəssisələr"},
		{short_name: "Qurğular", full_name: "Qurğular"},
		{short_name: "Mənzillər", full_name: "Mənzillər"},
		{short_name: "Fərdi Yaşayış Evləri", full_name: "Fərdi yaşayış və bağ evləri"},
		{short_name: "Maşın və Avadanlıqlar", full_name: "Maşınlar və avadanlıqlar"},
		{short_name: "Yüksək Texnologiyalar", full_name: "Yüksək texnologiyalar məhsulu olan hesablama texnikası"},
		{short_name: "Nəqliyyat Vasitələri", full_name: "Nəqliyyat vasitələri"},
		{short_name: "Digər Əsas Vəsaitlər", full_name: "Digər əsas vəsaitlər"}
	];
}

function get_field_key_js(asset_type) {
	// Дублируем логику из Python для создания ключей полей
	if (!asset_type) {
		return "unknown";
	}
	
	// if (asset_type.includes("Binalar, tikililər və qurğular")) {
	// 	return "buildings_structures_facilities";
	// } else 
	if (asset_type.includes("Çoxmərtəbəli") && asset_type.includes("yaşayış binalar")) {
		return "multi_story_residential";
	} else if (asset_type.includes("Qeyri-yaşayış binaları")) {
		return "non_residential_buildings";
	} else if (asset_type.includes("Əmlak kompleksi kimi müəssisələr")) {
		return "property_complex_enterprises";
	} else if (asset_type === "Qurğular") {
		return "installations";
	} else if (asset_type.includes("Mənzillər")) {
		return "apartments";
	} else if (asset_type.includes("Fərdi yaşayış və bağ evləri")) {
		return "individual_residential_garden";
	} else if (asset_type.includes("Maşınlar və avadanlıqlar")) {
		return "machinery_equipment";
	} else if (asset_type.includes("Yüksək texnologiyalar") && asset_type.includes("hesablama texnikası")) {
		return "high_tech_computing";
	} else if (asset_type.includes("Nəqliyyat vasitələri")) {
		return "transport_vehicles";
	} else if (asset_type.includes("Digər əsas vəsaitlər")) {
		return "other_fixed_assets";
	} else {
		return "other_asset_type";
	}
}