// scripts/fill-file-sizes.ts
import 'dotenv/config';
import { db } from '../../db';
import { files } from '../../db/schema';
import { eq, isNull } from 'drizzle-orm';
import { HeadObjectCommand } from "@aws-sdk/client-s3";
import { s3, initS3 } from '../utils/s3';
import { loadSecrets, secrets } from '../utils/secrets';

async function migrate() {
    console.log("🚀 Starte Migration der Dateigrößen...");

    // 1. Setup
    await loadSecrets();
    await initS3();

    // 2. Alle Dateien holen, die noch keine Größe haben (oder alle, um sicherzugehen)
    // Wir nehmen erstmal ALLE, um sicherzustellen, dass alles stimmt.
    const allFiles = await db.select().from(files);

    console.log(`📦 ${allFiles.length} Dateien in der Datenbank gefunden.`);

    let successCount = 0;
    let errorCount = 0;

    // 3. Loop durch alle Dateien
    for (const file of allFiles) {
        if (!file.path) {
            console.log(`⏭️  Überspringe Datei ${file.id} (Kein Pfad)`);
            continue;
        }

        try {
            // S3 fragen (HeadObject lädt nur Metadaten, nicht die ganze Datei -> Schnell)
            const command = new HeadObjectCommand({
                Bucket: secrets.S3_BUCKET, // Oder secrets.S3_BUCKET_NAME je nach deiner Config
                Key: file.path
            });

            const response = await s3.send(command);
            const size = response.ContentLength || 0;

            // In DB speichern
            await db.update(files)
                .set({ size: size })
                .where(eq(files.id, file.id));

            process.stdout.write("."); // Fortschrittsanzeige
            successCount++;

        } catch (error: any) {
            process.stdout.write("X");
            // console.error(`\n❌ Fehler bei ${file.path}: ${error.name}`);

            // Optional: Wenn Datei in S3 fehlt, könnten wir sie markieren oder loggen
            if (error.name === 'NotFound') {
                // console.error(` -> Datei existiert nicht im Bucket!`);
            }
            errorCount++;
        }
    }

    console.log("\n\n------------------------------------------------");
    console.log(`✅ Fertig!`);
    console.log(`Updated: ${successCount}`);
    console.log(`Fehler:  ${errorCount} (Meistens Dateien, die im Bucket fehlen)`);
    console.log("------------------------------------------------");
    process.exit(0);
}

migrate().catch(err => {
    console.error("Fataler Fehler:", err);
    process.exit(1);
});