using System.ComponentModel.DataAnnotations;
namespace BewerbungsSeite.Models.SiteContent;
/// Startbereich der Seite (section id="hero").
public class HeroSection : IValidatableObject
{
[StringLength(ContentLimits.Kicker, ErrorMessage = ContentLimits.TooLongMessage)]
public string Kicker { get; set; } = string.Empty;
/// Grosse Titelzeilen. Die letzte Zeile wird farblich hervorgehoben.
public List TitleLines { get; set; } = new();
[StringLength(ContentLimits.ParagraphText, ErrorMessage = ContentLimits.TooLongMessage)]
public string Intro { get; set; } = string.Empty;
public LinkItem PrimaryButton { get; set; } = new();
public LinkItem SecondaryButton { get; set; } = new();
/// Kleine Links unter den Buttons (LinkedIn, E-Mail, ...).
public List SocialLinks { get; set; } = new();
[StringLength(ContentLimits.Url, ErrorMessage = ContentLimits.TooLongMessage)]
public string PortraitImage { get; set; } = string.Empty;
[StringLength(ContentLimits.AltText, ErrorMessage = ContentLimits.TooLongMessage)]
public string PortraitAlt { get; set; } = string.Empty;
///
/// Prueft die Titelzeilen einzeln: [StringLength] laesst sich nicht direkt
/// auf eine List<string> anwenden, deshalb hier von Hand.
///
public IEnumerable Validate(ValidationContext validationContext)
{
for (var i = 0; i < TitleLines.Count; i++)
{
if (TitleLines[i]?.Length > ContentLimits.Heading)
{
yield return new ValidationResult(
$"Titelzeile {i + 1} darf höchstens {ContentLimits.Heading} Zeichen lang sein.",
[nameof(TitleLines)]);
}
}
}
}