#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Загрузка Classification Codes из fixture файла в базу данных
"""
import json
import os
import frappe

def load_classification_codes():
	"""Загрузка классификационных кодов"""

	fixture_file = os.path.join(
		frappe.get_app_path("invoice_az"),
		"fixtures",
		"classification_code.json"
	)

	print(f"\n📂 Загрузка данных из: {fixture_file}")

	if not os.path.exists(fixture_file):
		print(f"❌ Файл не найден: {fixture_file}")
		return False

	# Загружаем JSON
	with open(fixture_file, 'r', encoding='utf-8') as f:
		records = json.load(f)

	print(f"📊 Всего записей в файле: {len(records)}")

	# Удаляем существующие записи
	existing_count = frappe.db.count('Classification code')
	if existing_count > 0:
		print(f"🗑️  Удаление существующих {existing_count} записей...")
		frappe.db.delete('Classification code')
		frappe.db.commit()

	# Загружаем новые записи
	print("💾 Загрузка новых записей...")

	created = 0
	errors = 0

	for idx, record in enumerate(records, 1):
		try:
			# Проверяем что запись не существует
			if frappe.db.exists('Classification code', record['code']):
				print(f"  ⚠️  Пропускаем {record['code']}: уже существует")
				continue

			# Создаем новый документ
			doc = frappe.new_doc('Classification code')
			doc.name = record['code']  # Устанавливаем name явно
			doc.code = record['code']
			doc.name_az = record['name_az']
			doc.insert(ignore_permissions=True, ignore_mandatory=True)

			created += 1

			if idx % 20 == 0:
				print(f"  ✓ Загружено {idx}/{len(records)}...")
				frappe.db.commit()

		except Exception as e:
			errors += 1
			print(f"  ❌ Ошибка при загрузке {record.get('code', '?')}: {str(e)}")

	# Финальный commit
	frappe.db.commit()

	print("\n" + "="*70)
	print("РЕЗУЛЬТАТ:")
	print("="*70)
	print(f"✅ Создано новых записей: {created}")
	if errors > 0:
		print(f"❌ Ошибок: {errors}")
	print(f"📊 Всего в базе: {frappe.db.count('Classification code')}")
	print("="*70)

	return True

if __name__ == '__main__':
	frappe.init(site='site1')
	frappe.connect()
	load_classification_codes()
	frappe.destroy()
