using Theriapolis.Core.Rules.Stats;
namespace Theriapolis.Core.Rules.Combat;
///
/// One attack a combatant can attempt — a weapon, a natural attack, or an
/// NPC stat-block entry. Built once at combat-start; the resolver rolls
/// against it. Distinct from , which is the
/// per-attempt struct that bakes in attacker/defender/situation.
///
public sealed record AttackOption
{
public string Name { get; init; } = "";
/// Total +N to add to the d20 attack roll.
public int ToHitBonus { get; init; }
public DamageRoll Damage { get; init; } = new(0, 0, 0, DamageType.Bludgeoning);
/// Reach in tactical tiles. 1 = 5 ft. melee; 2 = 10 ft. polearm or Large reach.
public int ReachTiles { get; init; } = 1;
/// Short-range tiles for ranged attacks (0 = melee-only).
public int RangeShortTiles { get; init; } = 0;
/// Long-range tiles (disadvantage past short, can't fire past long).
public int RangeLongTiles { get; init; } = 0;
/// Crit-range threshold (default 20; razored weapons crit on 19+).
public int CritOnNatural { get; init; } = 20;
public bool IsRanged => RangeShortTiles > 0;
}