<?php

declare(strict_types=1);

namespace Ekdos\N8n;

/**
 * Wie lange welcher Bereich zwischengespeichert wird.
 *
 * Die frische TTL orientiert sich am Aktualisierungstakt der Oberflaeche: die
 * Ticketliste laedt alle 20 Sekunden nach, 15 Sekunden Cache fangen also beide
 * offenen Arbeitsplaetze ab, ohne dass jemand veraltete Daten sieht.
 *
 * Die Rueckfall-TTL ist grosszuegig. Sie greift nur, wenn n8n nicht erreichbar
 * ist -- dann sind zehn Minuten alte Tickets deutlich besser als eine Fehlermeldung.
 *
 * @phpstan-type Policy array{0: string, 1: int, 2: int}
 */
final class CachePolicy
{
    //                                    Gruppe               frisch  Rueckfall
    public const array Tickets         = ['tickets',              15,     600];
    public const array Offers          = ['offers',               30,     600];
    public const array Customers       = ['customers',           120,    1800];
    public const array Tasks           = ['tasks',                20,     600];
    public const array Invoices        = ['invoices',             30,     600];
    public const array InvoicesCreate  = ['invoices-create',      30,     600];
    public const array InvoicesReview  = ['invoices-review',      30,     600];
    public const array InvoicesSend    = ['invoices-send',        30,     600];
    public const array Purchases       = ['purchases',            30,     600];

    /** Der Stundennachweis ist ein schwerer Report und aendert sich selten. */
    public const array Hours           = ['hours',               300,    3600];

    /** Alle Gruppen, fuer die Wartungs-CLI und den Sammelaufruf nach dem Abgleich. */
    public const array ALL_GROUPS = [
        'tickets', 'offers', 'customers', 'tasks',
        'invoices', 'invoices-create', 'invoices-review', 'invoices-send',
        'purchases', 'hours',
    ];
}
