#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Создание всех Classification Codes из classification_codes.txt
"""
import json
import frappe
from frappe.utils import now

def create_codes():
	"""Создание кодов"""

	# Загружаем исходный файл
	source_file = "/home/frappe/frappe-bench/apps/invoice_az/classification_codes.txt"

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

	with open(source_file, 'r', encoding='utf-8') as f:
		data = json.load(f)

	codes = data.get('liabilities', [])
	print(f"📊 Всего кодов в файле: {len(codes)}")

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

	# Создаем новые записи
	print("💾 Создание новых записей...\n")

	created = 0
	errors = 0

	for idx, item in enumerate(codes, 1):
		try:
			code = item.get('code')
			name_az = item.get('name', {}).get('az', '')

			if not code or not name_az:
				print(f"  ⚠️  Пропускаем запись {idx}: отсутствует код или название")
				continue

			# Вставляем через SQL
			frappe.db.sql("""
				INSERT INTO `tabClassification code`
				(name, code, classification_name, docstatus, creation, modified, modified_by, owner)
				VALUES (%s, %s, %s, 0, %s, %s, 'Administrator', 'Administrator')
			""", (
				code,  # name (ID)
				code,  # code
				name_az,  # classification_name
				now(),
				now()
			))

			created += 1

			if idx % 20 == 0:
				print(f"  ✓ Создано {created} записей...")
				frappe.db.commit()

		except Exception as e:
			errors += 1
			print(f"  ❌ Ошибка при создании {item.get('code', '?')}: {str(e)}")

	frappe.db.commit()

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

	# Показываем примеры
	print(f"\n{'='*80}")
	print("ПРИМЕРЫ СОЗДАННЫХ ЗАПИСЕЙ:")
	print(f"{'='*80}\n")

	examples = frappe.db.sql("""
		SELECT name, code, classification_name
		FROM `tabClassification code`
		ORDER BY code
		LIMIT 5
	""", as_dict=True)

	for idx, c in enumerate(examples, 1):
		name_short = c.classification_name[:70] + '...' if len(c.classification_name) > 70 else c.classification_name
		print(f"{idx}. ID: {c.name}")
		print(f"   Code: {c.code}")
		print(f"   Classification Name: {name_short}\n")

	print(f"{'='*80}")

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