const fs = require('fs');
const path = require('path');

// Счетчики
let totalFilesProcessed = 0;
let totalChanges = 0;
let filesModified = 0;

function processJsonFile(filePath) {
    try {
        // Читаем файл как текст
        let content = fs.readFileSync(filePath, 'utf8');
        const originalContent = content;
        
        const fileName = path.basename(path.dirname(filePath));
        console.log(`📁 Обработка: ${fileName}/`);
        
        let changesCount = 0;
        
        // Разбиваем на строки
        const lines = content.split('\n');
        const newLines = [];
        
        for (let i = 0; i < lines.length; i++) {
            const line = lines[i];
            newLines.push(line);
            
            // Если строка содержит "fieldtype": "Float"
            if (line.includes('"fieldtype": "Float"') || line.includes('"fieldtype":"Float"')) {
                // Проверяем, что следующая строка НЕ содержит precision
                let hasPrecision = false;
                if (i + 1 < lines.length) {
                    hasPrecision = lines[i + 1].includes('"precision"');
                }
                
                if (!hasPrecision) {
                    // Находим отступ текущей строки
                    const indent = line.match(/^(\s*)/)[1];
                    
                    // Проверяем, есть ли запятая в конце строки
                    if (!line.trim().endsWith(',')) {
                        // Заменяем последнюю добавленную строку, добавив запятую
                        newLines[newLines.length - 1] = line.replace(/"Float"/, '"Float",');
                    }
                    
                    // Добавляем строку с precision
                    const precisionLine = `${indent}"precision": "2",`;
                    newLines.push(precisionLine);
                    changesCount++;
                    
                    console.log(`    ✓ Добавлен precision (строка ${i + 1})`);
                }
            }
        }
        
        // Собираем обратно
        if (changesCount > 0) {
            content = newLines.join('\n');
            
            // Убираем лишнюю запятую перед закрывающей скобкой, если есть
            content = content.replace(/,(\s*\n\s*\})/g, '$1');
            
            fs.writeFileSync(filePath, content, 'utf8');
            console.log(`  ✅ Обновлено. Добавлено precision: ${changesCount}\n`);
            filesModified++;
            totalChanges += changesCount;
        } else {
            console.log(`  ℹ️ Изменений не требуется\n`);
        }
        
        totalFilesProcessed++;
        
    } catch (error) {
        console.error(`❌ Ошибка в файле ${filePath}:`, error.message);
    }
}

function processAllDoctypes(rootPath) {
    try {
        const entries = fs.readdirSync(rootPath, { withFileTypes: true });
        
        entries.forEach(entry => {
            if (entry.isDirectory()) {
                const doctypePath = path.join(rootPath, entry.name);
                const files = fs.readdirSync(doctypePath);
                const jsonFiles = files.filter(f => f.endsWith('.json'));
                
                jsonFiles.forEach(jsonFile => {
                    processJsonFile(path.join(doctypePath, jsonFile));
                });
            }
        });
        
    } catch (error) {
        console.error(`❌ Ошибка при чтении папки:`, error.message);
    }
}

// ГЛАВНАЯ ФУНКЦИЯ
const doctypePath = 'D:\\taxes_az\\taxes_az\\taxes_az\\doctype';

console.log('========================================');
console.log('  Добавление precision: "2" к Float');  
console.log('========================================\n');

if (!fs.existsSync(doctypePath)) {
    console.error('❌ Папка не найдена:', doctypePath);
    process.exit(1);
}

// Давайте сначала проверим один файл для отладки
const testMode = false; // Измените на false для обработки всех файлов

if (testMode) {
    // Тестовый режим - проверяем первый найденный файл
    const entries = fs.readdirSync(doctypePath, { withFileTypes: true });
    for (let entry of entries) {
        if (entry.isDirectory()) {
            const testPath = path.join(doctypePath, entry.name);
            const files = fs.readdirSync(testPath);
            const jsonFile = files.find(f => f.endsWith('.json'));
            
            if (jsonFile) {
                console.log(`🧪 ТЕСТОВЫЙ РЕЖИМ - обработка одного файла\n`);
                processJsonFile(path.join(testPath, jsonFile));
                
                // Показываем фрагмент результата
                const result = fs.readFileSync(path.join(testPath, jsonFile), 'utf8');
                const floatIndex = result.indexOf('"fieldtype": "Float"');
                if (floatIndex > -1) {
                    console.log('\n📝 Фрагмент результата:');
                    console.log(result.substring(Math.max(0, floatIndex - 100), floatIndex + 200));
                }
                break;
            }
        }
    }
} else {
    // Обработка всех файлов
    processAllDoctypes(doctypePath);
}

console.log('========================================');
console.log('📊 РЕЗУЛЬТАТ:');
console.log(`   Файлов проверено: ${totalFilesProcessed}`);
console.log(`   Файлов изменено: ${filesModified}`);
console.log(`   Полей с precision: ${totalChanges}`);
console.log('========================================');

if (filesModified > 0) {
    console.log('\n✅ Готово!');
}