namespace Flaro.Core.Playback;
/// Wann ein Titel angefangen ist und wann er als gesehen gilt.
///
///
///
/// Zwei Zahlen, die niemand raten kann. Wie lange man hineinschauen
/// muss, damit es zählt, und ab welchem Anteil ein Film durch ist — das hängt
/// davon ab, wie jemand schaut, nicht davon, was technisch richtig wäre. Beide
/// standen als Konstante im Quelltext; jetzt stehen sie in den Einstellungen.
///
///
/// Als Wert, nicht als Abfrage. bleibt damit
/// ein reiner Typ: er rechnet, er liest nichts. Prüfbar ohne Datenbank, und
/// derselbe Satz Regeln gilt für eine Meldung und für die Neubewertung aller
/// vorhandenen Zeilen.
///
///
///
///
/// Wie weit man gekommen sein muss, damit ein Titel in „Weiterschauen" steht.
/// heisst: jede angefangene Sekunde zählt.
///
/// Ab welchem Anteil der Laufzeit ein Titel gesehen ist.
public readonly record struct Wiedergaberegeln(TimeSpan FortsetzenAb, double GesehenAnteil)
{
/// Was gilt, solange niemand etwas anderes eingestellt hat.
///
///
/// Neunzig Sekunden, nicht null. Ohne Untergrenze genügte ein
/// einziger Tick: wer im Aufmacher eine Sekunde hineinschaute, fand den
/// Titel danach in „Weiterschauen" wieder. Eineinhalb Minuten sind lang
/// genug, dass niemand aus Versehen hineinfällt, und kurz genug, dass eine
/// abgebrochene Folge noch zählt.
///
public static readonly Wiedergaberegeln Vorgabe = new(TimeSpan.FromSeconds(90), 0.90);
/// Dieselben Regeln mit geprüften Werten.
///
///
/// Was aus der Datenbank kommt, hat dort irgendwann jemand hineingeschrieben.
/// Ein Anteil von 0 hiesse „alles ist gesehen", einer von 2 „nichts".
///
public Wiedergaberegeln Geprueft() => new(
FortsetzenAb < TimeSpan.Zero ? TimeSpan.Zero : FortsetzenAb,
Math.Clamp(GesehenAnteil, 0.5, 1.0));
}