namespace Vanguard.Rules.Cards;
///
/// Логическая карта. Одна на имя: параллельные арты и переиздания ссылаются сюда через nameId.
/// Лимит копий в колоде считается по этому объекту, а не по принту.
///
public sealed record CardDefinition
{
public required string NameId { get; init; }
public required string NameEn { get; init; }
public string? NameRu { get; init; }
public required CardType Type { get; init; }
public required int Grade { get; init; }
public required int Power { get; init; }
public required int Shield { get; init; }
public int Critical { get; init; } = 1;
public TriggerType Trigger { get; init; } = TriggerType.None;
public required Clan Clan { get; init; }
/// Sentinel (Perfect Guard). Лимит — 4 карты в колоде.
public bool IsSentinel { get; init; }
/// Restraint: не может атаковать.
public bool IsRestraint { get; init; }
///
/// Явное переопределение печатной поддержки. null — по умолчанию:
/// карты 0 и 1 ранга поддерживают, остальные нет.
///
public bool? BoostOverride { get; init; }
/// Печатная способность поддержки. Эффекты могут изменить её в рантайме.
public bool HasBoost => BoostOverride ?? Grade <= 1;
/// Явное переопределение печатного перехвата. null — по умолчанию 2 ранг.
public bool? InterceptOverride { get; init; }
/// Печатный перехват: по умолчанию у карт 2 ранга.
public bool HasIntercept => InterceptOverride ?? Grade == 2;
///
/// Может атаковать Арьергард в заднем ряду той же колонки (Wyvern Strike, Tejas).
///
public bool CanSnipeBackRow { get; init; }
///
/// Печатное число проверок при атаке из круга Авангарда:
/// 0–2 ранг — одна, 3 ранг и выше — двойная.
///
public int DefaultDriveChecks => Grade >= 3 ? 2 : 1;
public string? TextEn { get; init; }
public string? TextRu { get; init; }
/// Grade 0 без триггера — кандидат в стартовый вэнгард.
public bool IsStartingVanguardCandidate => Grade == 0 && Trigger == TriggerType.None;
}
/// Конкретный принт: номер + арт. Единица коллекции и бустера.
public sealed record CardPrinting
{
public required string PrintingId { get; init; }
public required string NameId { get; init; }
public required Rarity Rarity { get; init; }
public string? ImageKey { get; init; }
/// Параллельный арт (BT01/S01…S12).
public bool IsParallel { get; init; }
/// Для параллельного арта — принт, к которому он привязан.
public string? BasePrintingId { get; init; }
}