import { S3Client, ListObjectsV2Command, CopyObjectCommand, DeleteObjectCommand } from '@aws-sdk/client-s3';

const client = new S3Client({
  region: 'auto',
  endpoint: `https://${process.env.CLOUDFLARE_ACCOUNT_ID}.r2.cloudflarestorage.com`,
  credentials: {
    accessKeyId: process.env.CLOUDFLARE_R2_ACCESS_KEY_ID!,
    secretAccessKey: process.env.CLOUDFLARE_R2_SECRET_ACCESS_KEY!
  }
});

const bucket = process.env.CLOUDFLARE_R2_BUCKET_NAME!;

async function listAndMoveAds() {
  // Lister tout le bucket pour voir ce qu'il y a
  console.log('Listing all objects in bucket...\n');
  
  const listResult = await client.send(new ListObjectsV2Command({
    Bucket: bucket,
    Prefix: 'ads/',
    MaxKeys: 1000
  }));
  
  console.log(`Found ${listResult.Contents?.length || 0} objects with prefix ads/`);
  
  if (listResult.Contents && listResult.Contents.length > 0) {
    listResult.Contents.slice(0, 20).forEach(obj => console.log(`  - ${obj.Key}`));
    if (listResult.Contents.length > 20) {
      console.log(`  ... and ${listResult.Contents.length - 20} more`);
    }
    
    // Déplacer vers backup
    const destPrefix = 'backups/ads-old-' + new Date().toISOString().split('T')[0] + '/';
    console.log(`\nMoving to ${destPrefix}...`);
    
    let moved = 0;
    for (const obj of listResult.Contents) {
      const sourceKey = obj.Key!;
      const destKey = destPrefix + sourceKey;
      
      try {
        await client.send(new CopyObjectCommand({
          Bucket: bucket,
          CopySource: `${bucket}/${sourceKey}`,
          Key: destKey
        }));
        
        await client.send(new DeleteObjectCommand({
          Bucket: bucket,
          Key: sourceKey
        }));
        
        moved++;
        if (moved % 10 === 0) console.log(`  Moved ${moved} objects...`);
      } catch (err) {
        console.error(`  Error moving ${sourceKey}:`, err);
      }
    }
    
    console.log(`\nDone! Moved ${moved} objects`);
  } else {
    console.log('No objects found');
  }
}

listAndMoveAds().catch(console.error);
