#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Перезагрузка Classification Codes через прямую вставку в БД
"""
import json
import os
import frappe
from frappe.utils import now

def reload_codes():
	"""Перезагрузка кодов"""

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

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

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

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

	# Удаляем все существующие записи
	print("🗑️  Удаление существующих записей...")
	frappe.db.sql("DELETE FROM `tabClassification code`")
	frappe.db.commit()

	# Вставляем через SQL
	print("💾 Загрузка новых записей...")

	created = 0
	for idx, record in enumerate(records, 1):
		try:
			frappe.db.sql("""
				INSERT INTO `tabClassification code`
				(name, code, name_az, docstatus, creation, modified, modified_by, owner)
				VALUES (%s, %s, %s, 0, %s, %s, 'Administrator', 'Administrator')
			""", (
				record['code'],  # name
				record['code'],  # code
				record['name_az'],  # name_az
				now(),
				now()
			))

			created += 1

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

		except Exception as e:
			print(f"  ❌ Ошибка: {record['code']}: {str(e)}")

	frappe.db.commit()

	print(f'\n✅ Создано записей: {created}')

	# Проверка
	print('\n🔍 Проверка первых 5 записей:')
	print('='*100)

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

	for idx, c in enumerate(result, 1):
		name_short = c.name_az[:60] + '...' if c.name_az and len(c.name_az) > 60 else (c.name_az or 'None')
		print(f'{idx}. ID: {c.name:10} | Code: {c.code:10} | Name: {name_short}')
	print('='*100)

	total = frappe.db.count('Classification code')
	print(f'\n📊 Всего в базе: {total} записей')

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