const { DocumentProcessorServiceClient } = require('@google-cloud/documentai');

// Configuration
const PROJECT_ID = 'cim-summarizer';
const LOCATION = 'us';

async function createProcessor() {
  console.log('🔧 Creating Document AI Processor...\n');
  
  const client = new DocumentProcessorServiceClient();
  
  try {
    // First, let's check what processor types are available
    console.log('1. Checking available processor types...');
    
    // Try to create a Document OCR processor
    console.log('2. Creating Document OCR processor...');
    
    const [operation] = await client.createProcessor({
      parent: `projects/${PROJECT_ID}/locations/${LOCATION}`,
      processor: {
        displayName: 'CIM Document Processor',
        type: 'projects/245796323861/locations/us/processorTypes/ocr-processor',
      },
    });
    
    console.log('   ⏳ Waiting for processor creation...');
    const [processor] = await operation.promise();
    
    console.log(`   ✅ Processor created successfully!`);
    console.log(`   📋 Name: ${processor.name}`);
    console.log(`   🆔 ID: ${processor.name.split('/').pop()}`);
    console.log(`   📝 Display Name: ${processor.displayName}`);
    console.log(`   🔧 Type: ${processor.type}`);
    console.log(`   📍 Location: ${processor.location}`);
    console.log(`   📊 State: ${processor.state}`);
    
    const processorId = processor.name.split('/').pop();
    
    console.log('\n🎯 Configuration:');
    console.log(`Add this to your .env file:`);
    console.log(`DOCUMENT_AI_PROCESSOR_ID=${processorId}`);
    
    return processorId;
    
  } catch (error) {
    console.error('❌ Error creating processor:', error.message);
    
    if (error.message.includes('already exists')) {
      console.log('\n📋 Processor already exists. Listing existing processors...');
      
      try {
        const [processors] = await client.listProcessors({
          parent: `projects/${PROJECT_ID}/locations/${LOCATION}`,
        });
        
        if (processors.length > 0) {
          processors.forEach((processor, index) => {
            console.log(`\n📋 Processor ${index + 1}:`);
            console.log(`   Name: ${processor.displayName}`);
            console.log(`   ID: ${processor.name.split('/').pop()}`);
            console.log(`   Type: ${processor.type}`);
            console.log(`   State: ${processor.state}`);
          });
          
          const processorId = processors[0].name.split('/').pop();
          console.log(`\n🎯 Using existing processor ID: ${processorId}`);
          console.log(`Add this to your .env file: DOCUMENT_AI_PROCESSOR_ID=${processorId}`);
          
          return processorId;
        }
      } catch (listError) {
        console.error('Error listing processors:', listError.message);
      }
    }
    
    throw error;
  }
}

async function testProcessor(processorId) {
  console.log(`\n🧪 Testing Processor: ${processorId}`);
  
  const client = new DocumentProcessorServiceClient();
  
  try {
    const processorPath = `projects/${PROJECT_ID}/locations/${LOCATION}/processors/${processorId}`;
    
    // Get processor details
    const [processor] = await client.getProcessor({
      name: processorPath,
    });
    
    console.log(`   ✅ Processor is active: ${processor.state === 'ENABLED'}`);
    console.log(`   📋 Display Name: ${processor.displayName}`);
    console.log(`   🔧 Type: ${processor.type}`);
    
    if (processor.state === 'ENABLED') {
      console.log('   🎉 Processor is ready for use!');
      return true;
    } else {
      console.log(`   ⚠️  Processor state: ${processor.state}`);
      return false;
    }
    
  } catch (error) {
    console.error(`   ❌ Error testing processor: ${error.message}`);
    return false;
  }
}

async function main() {
  try {
    const processorId = await createProcessor();
    await testProcessor(processorId);
    
    console.log('\n🎉 Document AI Processor Setup Complete!');
    console.log('\n📋 Next Steps:');
    console.log('1. Add the processor ID to your .env file');
    console.log('2. Test with a real CIM document');
    console.log('3. Integrate with your processing pipeline');
    
  } catch (error) {
    console.error('\n❌ Setup failed:', error.message);
    console.log('\n💡 Alternative: Create processor manually at:');
    console.log('https://console.cloud.google.com/ai/document-ai/processors');
    console.log('1. Click "Create Processor"');
    console.log('2. Select "Document OCR"');
    console.log('3. Choose location: us');
    console.log('4. Name it: "CIM Document Processor"');
    
    process.exit(1);
  }
}

if (require.main === module) {
  main();
}

module.exports = { createProcessor, testProcessor }; 