<?php
/**
 * Musikbibliothek: Einträge in der DB (Tabelle musik).
 */
if (!defined('FUNCTIONS_ROOT')) {
    return;
}

/**
 * Alle Songs aus der DB (sortiert nach erstellt_am absteigend).
 * @return array<int, array{id: int, dateiname: string, titel: string|null, album: string|null, groesse: int, erstellt_am: string}>
 */
function function_musik_alle(): array {
    $pdo = $GLOBALS['pdo'] ?? null;
    if (!$pdo) return [];
    $sql = "SELECT id, dateiname, titel, album, groesse, erstellt_am FROM musik ORDER BY album ASC, titel ASC, erstellt_am DESC";
    $stmt = $pdo->query($sql);
    return $stmt ? $stmt->fetchAll(PDO::FETCH_ASSOC) : [];
}

/**
 * Einen Song eintragen (nach Upload).
 */
function function_musik_einfuegen(string $dateiname, int $groesse, ?string $titel = null, ?string $album = null): bool {
    $pdo = $GLOBALS['pdo'] ?? null;
    if (!$pdo) return false;
    $sql = "INSERT INTO musik (dateiname, titel, album, groesse) VALUES (:dateiname, :titel, :album, :groesse)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        'dateiname' => $dateiname,
        'titel'     => $titel,
        'album'     => $album !== null && $album !== '' ? $album : null,
        'groesse'   => $groesse,
    ]);
    return $stmt->rowCount() > 0;
}

/**
 * Titel und/oder Album eines Songs aktualisieren.
 */
function function_musik_aktualisieren(int $id, ?string $titel = null, ?string $album = null): bool {
    $pdo = $GLOBALS['pdo'] ?? null;
    if (!$pdo) return false;
    $updates = [];
    $params = ['id' => $id];
    if ($titel !== null) {
        $updates[] = 'titel = :titel';
        $params['titel'] = $titel;
    }
    if ($album !== null) {
        $updates[] = 'album = :album';
        $params['album'] = $album === '' ? null : $album;
    }
    if (empty($updates)) return true;
    $sql = "UPDATE musik SET " . implode(', ', $updates) . " WHERE id = :id";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    return $stmt->rowCount() >= 0;
}

/**
 * Song anhand Dateiname löschen (DB-Eintrag).
 */
function function_musik_loeschen_nach_dateiname(string $dateiname): bool {
    $pdo = $GLOBALS['pdo'] ?? null;
    if (!$pdo) return false;
    $stmt = $pdo->prepare("DELETE FROM musik WHERE dateiname = :dateiname");
    $stmt->execute(['dateiname' => $dateiname]);
    return $stmt->rowCount() > 0;
}
