import 'package:equatable/equatable.dart'; /// A named duty position that can be assigned to a soldier record. /// /// Built-in positions are seeded at first launch and cannot be deleted. /// Users may add, rename, or delete custom positions. class SoldierPosition extends Equatable { const SoldierPosition({ required this.positionId, required this.title, this.isBuiltIn = false, }); /// Unique identifier (UUID v4 for custom; fixed string for built-ins). final String positionId; /// Human-readable position title (e.g. "Team Leader", "Rifleman"). final String title; /// True for positions seeded by the app; false for user-created ones. final bool isBuiltIn; SoldierPosition copyWith({ String? positionId, String? title, bool? isBuiltIn, }) { return SoldierPosition( positionId: positionId ?? this.positionId, title: title ?? this.title, isBuiltIn: isBuiltIn ?? this.isBuiltIn, ); } @override List get props => [positionId, title, isBuiltIn]; @override String toString() => 'SoldierPosition($positionId, "$title", builtIn: $isBuiltIn)'; // --------------------------------------------------------------------------- // Built-in positions // --------------------------------------------------------------------------- /// The full list of built-in Army duty positions seeded on first launch. static const List builtIns = [ // ── Command / Staff ────────────────────────────────────────────────────── SoldierPosition(positionId: 'bi_commander', title: 'Commander', isBuiltIn: true), SoldierPosition( positionId: 'bi_executive_officer', title: 'Executive Officer', isBuiltIn: true, ), SoldierPosition( positionId: 'bi_command_sergeant_major', title: 'Command Sergeant Major', isBuiltIn: true, ), SoldierPosition(positionId: 'bi_first_sergeant', title: 'First Sergeant', isBuiltIn: true), SoldierPosition( positionId: 'bi_operations_officer', title: 'S3 / Operations Officer', isBuiltIn: true, ), SoldierPosition( positionId: 'bi_intelligence_officer', title: 'S2 / Intelligence Officer', isBuiltIn: true, ), SoldierPosition( positionId: 'bi_logistics_officer', title: 'S4 / Logistics Officer', isBuiltIn: true, ), SoldierPosition(positionId: 'bi_signal_officer', title: 'S6 / Signal Officer', isBuiltIn: true), // ── Platoon ─────────────────────────────────────────────────────────────── SoldierPosition(positionId: 'bi_platoon_leader', title: 'Platoon Leader', isBuiltIn: true), SoldierPosition(positionId: 'bi_platoon_sergeant', title: 'Platoon Sergeant', isBuiltIn: true), SoldierPosition(positionId: 'bi_rto', title: 'RTO / Radio Operator', isBuiltIn: true), // ── Squad / Section ─────────────────────────────────────────────────────── SoldierPosition(positionId: 'bi_squad_leader', title: 'Squad Leader', isBuiltIn: true), SoldierPosition(positionId: 'bi_team_leader', title: 'Team Leader', isBuiltIn: true), // ── Individual ──────────────────────────────────────────────────────────── SoldierPosition(positionId: 'bi_rifleman', title: 'Rifleman', isBuiltIn: true), SoldierPosition(positionId: 'bi_grenadier', title: 'Grenadier', isBuiltIn: true), SoldierPosition( positionId: 'bi_automatic_rifleman', title: 'Automatic Rifleman', isBuiltIn: true, ), SoldierPosition(positionId: 'bi_machine_gunner', title: 'Machine Gunner', isBuiltIn: true), SoldierPosition(positionId: 'bi_sniper', title: 'Sniper', isBuiltIn: true), SoldierPosition(positionId: 'bi_jtac', title: 'JTAC / Fire Support', isBuiltIn: true), SoldierPosition(positionId: 'bi_medic', title: 'Medic', isBuiltIn: true), SoldierPosition(positionId: 'bi_combat_engineer', title: 'Combat Engineer', isBuiltIn: true), SoldierPosition(positionId: 'bi_driver', title: 'Driver', isBuiltIn: true), SoldierPosition(positionId: 'bi_gunner', title: 'Gunner', isBuiltIn: true), SoldierPosition(positionId: 'bi_loader', title: 'Loader', isBuiltIn: true), SoldierPosition(positionId: 'bi_tank_commander', title: 'Tank Commander', isBuiltIn: true), SoldierPosition(positionId: 'bi_crew_member', title: 'Crew Member', isBuiltIn: true), SoldierPosition(positionId: 'bi_supply_sergeant', title: 'Supply Sergeant', isBuiltIn: true), SoldierPosition(positionId: 'bi_armorer', title: 'Armorer', isBuiltIn: true), SoldierPosition(positionId: 'bi_commo_sergeant', title: 'Commo Sergeant', isBuiltIn: true), SoldierPosition(positionId: 'bi_intel_analyst', title: 'Intelligence Analyst', isBuiltIn: true), SoldierPosition(positionId: 'bi_forward_observer', title: 'Forward Observer', isBuiltIn: true), SoldierPosition(positionId: 'bi_chemical_officer', title: 'CBRN Specialist', isBuiltIn: true), ]; }