namespace AmiReel.Models; /// One page of the Shorts create-wizard. Extra effect pages are inserted only when the style needs them. public enum ShortWizardStep { Clip, Effect, StyleOptions, Titles, Encode, } /// Builds the Shorts wizard page list for a chosen visual style. public static class ShortWizard { public static IReadOnlyList StepsFor(ShortStyle style) { List steps = [ShortWizardStep.Clip, ShortWizardStep.Effect]; if (NeedsStyleOptions(style)) steps.Add(ShortWizardStep.StyleOptions); steps.Add(ShortWizardStep.Titles); steps.Add(ShortWizardStep.Encode); return steps; } public static bool NeedsStyleOptions(ShortStyle style) => style is ShortStyle.Brand or ShortStyle.Video; public static string Title(ShortWizardStep step) => step switch { ShortWizardStep.Clip => "Source clip", ShortWizardStep.Effect => "Visual effect", ShortWizardStep.StyleOptions => "Effect settings", ShortWizardStep.Titles => "Title card", ShortWizardStep.Encode => "Encoding", _ => "Short", }; public static string Description(ShortStyle style) => style switch { ShortStyle.Brand => "Title-card background image with a framed source clip.", ShortStyle.Pixel => "Pixelated backdrop with neon scan bars.", ShortStyle.Mirror => "Reflected source strips above and below the clip.", ShortStyle.Crop => "Full-frame vertical crop of the source.", ShortStyle.Workbench => "Workbench-style window around the source.", ShortStyle.Blur => "Blurred backdrop with a centered source.", ShortStyle.Crt => "CRT curvature, scanlines, and a rolling highlight.", ShortStyle.Copper => "Amiga copper bars behind the source.", ShortStyle.Stars => "Twinkling star field behind a framed clip.", ShortStyle.Grid => "Neon grid horizon behind the source.", ShortStyle.Tiles => "Four-tile mirrored backdrop.", ShortStyle.Scan => "Chunky scanlines and moving bars.", ShortStyle.Starfield => "Fast-moving star streaks.", ShortStyle.Plasma => "Demoscene plasma backdrop.", ShortStyle.Rasterbars => "Classic raster bars above and below the clip.", ShortStyle.Vhs => "Tape noise, chroma shift, and scanlines.", ShortStyle.Monitor => "CRT monitor bezel around the source.", ShortStyle.Split => "Split-band source strips around the main clip.", ShortStyle.Spectrum => "Scrolling audio spectrum. The source video must have audio.", ShortStyle.Video => "Looping background video with the Amiga clip overlaid.", _ => "", }; }