uto_manager/lib/domain/entities/soldier_position.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),
];
}