namespace KillerPDF.Features
{
///
/// What AboutController needs from the window hosting it, beyond the shared shell services.
///
/// Every member is a value or a plain string, never a control, so the controller holds no
/// reference to a TextBlock or a Button and can be driven by a stub in a test.
///
/// KillerPDF differs from Killendar's version in one way worth knowing: several of the About
/// card's lines are built as INLINES rather than set as text - the wordmark is two differently
/// styled runs, and the tagline, version and alias each carry a hyperlink. Constructing those
/// is UI work, so it stays in the shell and the controller hands over only the strings and the
/// one boolean the shell needs to decide what to build.
///
internal interface IAboutHost : IShellServices
{
/// Code-signing subject, or the unsigned message.
string Publisher { set; }
/// Certificate thumbprint, or "(none)".
string Thumbprint { set; }
/// SHA-256 of the running exe. Set twice: the "computing" placeholder first,
/// then the real digest once the background hash finishes.
string Sha256 { set; }
/// Release date baked in from the csproj, shown muted opposite the version.
/// Empty on an older build that predates the attribute.
string ReleaseDate { set; }
/// Builds the version line as a hyperlink through to that release tag.
void SetVersion(string version);
/// The quoted alias line. Null hides it - which is the case unless the exe is
/// signed AND the signature verifies AND the subject is Steve's, because a fork signed by
/// somebody else must not claim the alias.
void SetAlias(string? alias);
/// Whether a newer release exists, and whether the button is live while a
/// download is running.
string UpdateText { set; }
bool UpdateVisible { set; }
bool UpdateEnabled { set; }
/// Blocks a self-update while there are unsaved changes.
bool IsDirty { get; }
/// The document to reopen after the update relaunches, if any.
string? FileToReopen { get; }
/// Dismisses any other full-window overlay, then fades the About card in.
/// The overlays are mutually exclusive rather than stacking.
void ShowCard();
}
}