109 lines
5.3 KiB
Dart
109 lines
5.3 KiB
Dart
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<Object?> 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<SoldierPosition> 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),
|
|
];
|
|
}
|