using MediaBrowser.Model.Plugins;
namespace Jellyfin.Plugin.Vanguard.Configuration;
/// Plugin settings (edited on the plugin's config page).
public class PluginConfiguration : BasePluginConfiguration
{
// --- Discord -------------------------------------------------------------------------
public string DiscordBotToken { get; set; } = string.Empty;
public string DiscordGuildId { get; set; } = string.Empty;
// --- Discord feed (new stream / new clip notices) ---------------------------------------
/// Channel to post notices in (same guild). Empty = feed off.
public string NotifyChannelId { get; set; } = string.Empty;
public bool NotifyNewStreams { get; set; } = true;
public bool NotifyNewClips { get; set; } = true;
/// Public Jellyfin URL used in links, e.g. https://watch.example.com
public string PublicUrl { get; set; } = string.Empty;
/// Library names that count as streams / clips (case-insensitive substring match on the library name or path).
public string StreamsLibraryHint { get; set; } = "stream";
public string ClipsLibraryHint { get; set; } = "clip";
// --- Playback policy (no hardware encoder on this box) --------------------------------------
/// Set direct-play-only on all users automatically (new SSO users included). Turn off when the server can transcode.
public bool EnforceDirectPlayOnly { get; set; } = true;
public bool EnforceOnAdminsToo { get; set; } = false;
// --- Authentik (streamer username -> Discord user id via the OAuth source connection) --
public string AuthentikUrl { get; set; } = "https://auth.example.com";
public string AuthentikApiToken { get; set; } = string.Empty;
// --- Time / seasons ---------------------------------------------------------------------
public string TimeZoneId { get; set; } = "America/New_York";
/// Hour (0-23) at which the "broadcast day" rolls over. 4 = a 01:00 clip belongs to the previous evening.
public int BroadcastDayRolloverHour { get; set; } = 4;
/// Season name overrides: "202611=Winter Scrims Block", one per line.
public string SeasonNameOverrides { get; set; } = string.Empty;
/// Prefer the overlapping Discord scheduled event's name as the episode title; fallback is the dock title (folder name).
public bool EpisodeTitleFromEvent { get; set; } = true;
///
/// Folder name -> identity, one per line: "techy=123456789012345678" (Discord user id) or
/// "techy=authentik:someuser" (Authentik username). Folders not listed are looked up in Authentik
/// by username = folder name.
///
public string FolderIdentityMap { get; set; } = string.Empty;
/// Hours of slack when matching a recording to a Discord scheduled event (before start / after end).
public double EventMatchSlackHours { get; set; } = 1.0;
}