import { db } from '../server/services/db'
import { tracks, compilations, playlists, sql } from '../server/schema'
import { eq, and } from 'drizzle-orm'

async function updateEsid() {
  console.log('🚀 Démarrage de la mise à jour des esid')

  try {
    // 1. Mettre à jour les esid pour les compilations
    console.log('📋 Mise à jour des esid pour les compilations...')
    await db.run(sql`
      UPDATE tracks
      SET esid = (
        SELECT c.box_id || c.side || t."order"
        FROM compilations c
        WHERE c.id = tracks.source_id AND tracks.source_type = 'compilation'
      )
      WHERE source_type = 'compilation';
    `)

    // 2. Mettre à jour les esid pour les playlists
    console.log('📋 Mise à jour des esid pour les playlists...')

    // Récupérer toutes les playlists
    const allPlaylists = await db.select().from(playlists).all()

    for (const playlist of allPlaylists) {
      // Récupérer les tracks de la playlist triés par ordre
      const playlistTracks = await db
        .select()
        .from(tracks)
        .where(and(eq(tracks.sourceType, 'playlist'), eq(tracks.sourceId, playlist.id)))
        .orderBy(tracks.order)

      // Mettre à jour chaque track avec le bon esid
      for (let i = 0; i < playlistTracks.length; i++) {
        const track = playlistTracks[i]
        const esidSuffix =
          i < 26
            ? String.fromCharCode(65 + i) // A-Z pour les 26 premières pistes
            : (i + 1).toString() // Numéros pour les suivantes

        await db
          .update(tracks)
          .set({ esid: `${playlist.name}${esidSuffix}` })
          .where(eq(tracks.id, track.id))
      }

      console.log(`✅ Playlist ${playlist.name} mise à jour (${playlistTracks.length} pistes)`)
    }

    console.log('\n✅ Tous les esid ont été mis à jour avec succès !')
  } catch (error) {
    console.error('❌ Erreur lors de la mise à jour des esid:', error)
    process.exit(1)
  }
}

// Exécuter le script
updateEsid()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error('Erreur inattendue:', error)
    process.exit(1)
  })
