package de.gecheckt.pdf.umbenenner.application.dto;

import java.time.Instant;

/**
 * Lese- und Anzeige-DTO fuer Modell-Preise.
 *
 * <p>Im Gegensatz zum {@link ModelPriceEntry} darf {@link #updatedAt()}
 * {@code null} sein, falls der in der Datenbank gespeicherte Wert nicht als
 * {@link Instant} parsebar ist. In diesem Fall wird {@link #invalidUpdatedAt()}
 * auf {@code true} gesetzt und der ursprueng&shy;liche String in
 * {@link #invalidUpdatedAtRaw()} gehalten, damit die GUI &quot;ung&uuml;ltig&quot;
 * anzeigen kann.
 *
 * <p>Dieses DTO darf <strong>nicht</strong> direkt im Schreibpfad verwendet
 * werden. Schreiboperationen erfordern den vollvalidierten
 * {@link ModelPriceEntry}.
 *
 * @param provider                     Provider-Identifikator
 * @param modelName                    Modellname
 * @param priceInputPerTokenNanoUsd    Input-Preis in Nano-USD pro Token
 * @param priceOutputPerTokenNanoUsd   Output-Preis in Nano-USD pro Token
 * @param currency                     Waehrung; in V3.3 stets {@code "USD"}
 * @param updatedAt                    Letztes Update als {@link Instant}; {@code null} bei beschaedigtem DB-Wert
 * @param invalidUpdatedAtRaw          Originalstring aus DB, falls Parsing fehlgeschlagen ist; sonst {@code null}
 * @param invalidUpdatedAt             Flag: {@code true} wenn DB-Wert nicht parsebar war
 */
public record ModelPriceView(
        String provider,
        String modelName,
        long priceInputPerTokenNanoUsd,
        long priceOutputPerTokenNanoUsd,
        String currency,
        Instant updatedAt,
        String invalidUpdatedAtRaw,
        boolean invalidUpdatedAt) {
}
