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

frappe.query_reports["Taxable Assets 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) {
				// Разные цвета для разных типов колонок
				let color = "#28a745"; // зеленый по умолчанию
				
				if (column.fieldname.includes("_value_from")) {
					color = "#17a2b8"; // голубой для начальных остатков
				} else if (column.fieldname.includes("_value_to")) {
					color = "#28a745"; // зеленый для конечных остатков
				} else if (column.fieldname.includes("_insured")) {
					color = "#ffc107"; // желтый для страховки
				}
				
				value = `<span style="color: ${color}; font-weight: bold; background-color: ${color}15; padding: 2px 6px; border-radius: 3px;">${value}</span>`;
			} else if (value == 0 || !value) {
				value = `<span style="color: #ccc;">0.00</span>`;
			}
		}

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

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

		return value;
	},

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

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

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

// Функция экспорта сводки по типам активов
function export_asset_type_summary(report) {
	let data = report.data;
	let summary = calculate_asset_type_totals(data);
	
	// Создаем CSV с итогами по типам активов
	let csv_content = "Asset Type,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",${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_summary_' + frappe.datetime.get_today() + '.csv';
	document.body.appendChild(a);
	a.click();
	document.body.removeChild(a);
	window.URL.revokeObjectURL(url);
	
	frappe.show_alert({message: __("Asset type 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>📋 Типы налогооблагаемых активов в отчете:</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_asset_type_statistics(datatable_obj) {
	if (datatable_obj && datatable_obj.data) {
		let summary = calculate_asset_type_totals(datatable_obj.data);
		
		let stats_html = '<div class="asset-type-statistics" style="margin-top: 20px; padding: 20px; background: #f8f9fa; border-radius: 8px; border: 1px solid #dee2e6;">';
		stats_html += '<h4 style="margin-bottom: 15px; color: #495057;">📊 Сводка по типам налогооблагаемых активов:</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: #495057;">${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: 10px; border: 1px solid #dee2e6; border-radius: 4px; background: white;">`;
				stats_html += `<strong>${item.asset_type}</strong><br>`;
				stats_html += `<small>Активов: ${item.assets_count} | От: ${item.total_value_from.toFixed(2)} | До: ${item.total_value_to.toFixed(2)} | Страховка: ${item.total_insured.toFixed(2)}</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-top: 15px; border-top: 2px solid #007bff;">`;
		stats_html += `<div class="row">`;
		stats_html += `<div class="col-md-3"><strong>Всего активов: ${totals.total_assets}</strong></div>`;
		stats_html += `<div class="col-md-3"><strong>Остаток на начало: ${totals.total_value_from.toFixed(2)}</strong></div>`;
		stats_html += `<div class="col-md-3"><strong>Остаток на конец: ${totals.total_value_to.toFixed(2)}</strong></div>`;
		stats_html += `<div class="col-md-3"><strong>Всего страховки: ${totals.total_insured.toFixed(2)}</strong></div>`;
		stats_html += `</div>`;
		stats_html += `</div>`;
		
		stats_html += '</div>';
		
		// Удаляем предыдущую статистику если есть
		$('.asset-type-statistics').remove();
		
		// Добавляем новую статистику
		$(stats_html).insertAfter('.datatable');
	}
}

// Группировка активов по категориям
function group_summary_by_asset_category(summary) {
	let grouped = {
		'Здания и сооружения': [],
		'Жилая недвижимость': [],
		'Нежилая недвижимость': [],
		'Машины и оборудование': [],
		'Транспорт и техника': [],
		'Прочие активы': []
	};
	
	summary.forEach(item => {
		if (item.asset_type.includes('Buildings') || item.asset_type.includes('Installations')) {
			grouped['Здания и сооружения'].push(item);
		} else if (item.asset_type.includes('Residential') || item.asset_type.includes('Apartments')) {
			grouped['Жилая недвижимость'].push(item);
		} else if (item.asset_type.includes('Non-Residential') || item.asset_type.includes('Property Complex')) {
			grouped['Нежилая недвижимость'].push(item);
		} else if (item.asset_type.includes('Machinery') || item.asset_type.includes('High-Tech')) {
			grouped['Машины и оборудование'].push(item);
		} else if (item.asset_type.includes('Transport')) {
			grouped['Транспорт и техника'].push(item);
		} else {
			grouped['Прочие активы'].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: "Buildings & Structures", full_name: "Binalar, tikililər və qurğular"},
		{short_name: "Multi-Story Residential", full_name: "Çoxmərtəbəli (çoxmənzilli) yaşayış binalar"},
		{short_name: "Non-Residential Buildings", full_name: "Qeyri-yaşayış binaları (sahələri)"},
		{short_name: "Property Complex Enterprises", full_name: "Əmlak kompleksi kimi müəssisələr"},
		{short_name: "Installations", full_name: "Qurğular"},
		{short_name: "Apartments", full_name: "Mənzillər"},
		{short_name: "Individual Residential", full_name: "Fərdi yaşayış və bağ evləri"},
		{short_name: "Machinery & Equipment", full_name: "Maşınlar və avadanlıqlar"},
		{short_name: "High-Tech Computing", full_name: "Yüksək texnologiyalar məhsulu olan hesablama texnikası"},
		{short_name: "Transport Vehicles", full_name: "Nəqliyyat vasitələri"},
		{short_name: "Other Fixed Assets", 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";
	}
}