package dev.lions.unionflow.server.repository;

import dev.lions.unionflow.server.entity.BackupRecord;
import io.quarkus.panache.common.Sort;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.transaction.Transactional;

import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;

/**
 * Repository pour les enregistrements de sauvegarde.
 * Étend BaseRepository pour cohérence avec le reste du projet.
 */
@ApplicationScoped
public class BackupRecordRepository extends BaseRepository<BackupRecord> {

    public BackupRecordRepository() {
        super(BackupRecord.class);
    }

    /**
     * Liste tous les enregistrements de sauvegarde triés par date décroissante.
     */
    public List<BackupRecord> findAllOrderedByDate() {
        return findAll(Sort.by("dateCreation", Sort.Direction.Descending)).list();
    }

    /**
     * Met à jour le statut d'un enregistrement de sauvegarde.
     * Opération transactionnelle — utilisée pour passer de IN_PROGRESS à COMPLETED ou FAILED.
     */
    @Transactional
    public void updateStatus(UUID id, String status, Long sizeBytes,
                             LocalDateTime completedAt, String errorMessage) {
        update("status = ?1, sizeBytes = ?2, completedAt = ?3, errorMessage = ?4 WHERE id = ?5",
                status, sizeBytes, completedAt, errorMessage, id);
    }
}
