package de.assecutor.pdftool.invoice;

import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * Verwaltet gespeicherte Eingaben der E-Rechnungs-Maske in MongoDB
 * (Collection {@code invoice_drafts}); jede Speicherung liegt unter einem
 * eindeutigen Namen.
 */
@Service
public class InvoiceDraftService {

    private final InvoiceDraftRepository repository;

    public InvoiceDraftService(InvoiceDraftRepository repository) {
        this.repository = repository;
    }

    /** Speichert die Eingaben unter ihrem Namen (legt sie an oder überschreibt die bestehenden). */
    public void save(InvoiceDraft draft) {
        repository.findByName(draft.name())
                .ifPresent(existing -> repository.deleteById(existing.id()));
        repository.save(draft);
    }

    /** @return die gespeicherten Eingaben mit dem Namen oder leer, wenn keine existieren. */
    public Optional<InvoiceDraft> load(String name) {
        return repository.findByName(name);
    }

    /** @return true, wenn unter dem Namen bereits Eingaben gespeichert sind. */
    public boolean exists(String name) {
        return repository.existsByName(name);
    }

    /** @return die Namen aller gespeicherten Eingaben, alphabetisch sortiert. */
    public List<String> names() {
        return repository.findAll().stream()
                .map(draft -> draft.name())
                .sorted(String.CASE_INSENSITIVE_ORDER)
                .toList();
    }
}
