using TaskStatus = ClaudeDo.Data.Models.TaskStatus;
namespace ClaudeDo.Worker.Tickets;
///
/// Reine Abbildung Task-Status → Ticket-Status. Ticket-Status im Bandel-System:
/// 0 Keine, 1 Offen, 2 InBearbeitung, 3 Fertig, 4 Archiviert.
///
public static class TicketStatusMap
{
public const int InBearbeitung = 2;
public const int Fertig = 3;
private const string BandelPrefix = "bandel:";
///
/// Zielstatus im Ticketsystem, oder null wenn dieser Task-Status nichts melden soll.
/// "Offen" (1) wird nie geschrieben: das ist der Eingangszustand. Failed/Cancelled lassen
/// das Ticket bewusst auf InBearbeitung stehen — die Arbeit ist angefangen, nicht zurückgegeben.
///
public static int? ToTicketStatus(TaskStatus status) => status switch
{
TaskStatus.Running or TaskStatus.WaitingForReview => InBearbeitung,
TaskStatus.Done => Fertig,
_ => null,
};
/// Ticket-Id aus einem "bandel:<id>"-Ref, oder null bei jedem anderen Format.
public static int? ParseBandelTicketId(string? ticketRef)
{
if (string.IsNullOrWhiteSpace(ticketRef)) return null;
if (!ticketRef.StartsWith(BandelPrefix, StringComparison.OrdinalIgnoreCase)) return null;
var raw = ticketRef[BandelPrefix.Length..];
return int.TryParse(raw, out var id) && id > 0 ? id : null;
}
}