const sm = (o) => ({ ...BLANK_MEMBER(), unit: 'ST-3 · ALFA PLT', ...o });
const SEAL_BILLETS = [
['OIC','Platoon Cdr (O-3)'], ['AOIC','Asst OIC (O-2)'], ['CHIEF','Platoon Chief (E-7/8)'], ['LPO','Leading PO (E-6)'],
['SO1','Breacher'], ['SO1','Comms'], ['SO2','Sniper'], ['SO2','Corpsman'],
['SO1','Squad Lead'], ['SO2','JTAC'], ['SO2','Breacher'], ['SO2','Comms'], ['SO2','Sniper'], ['SO3','Corpsman'], ['SO3','Assaulter'], ['SO3','Assaulter'],
];
const SQUADS = [{ name: '1st Squad', slots: [0,1,2,3,4,5,6,7] }, { name: '2nd Squad', slots: [8,9,10,11,12,13,14,15] }];
const mkPlatoon = (plt, names, opts = {}) => SEAL_BILLETS.map(([role, title], i) => sm({
id: `${plt}${String(i + 1).padStart(2, '0')}`, role, title, name: names[i][0], last4: names[i][1], bloodType: names[i][2], pos: i + 1, weight: names[i][3] || 86,
unit: `ST-3 · ${({ A: 'ALFA', B: 'BRAVO', C: 'CHARLIE' })[plt]} PLT`, squad: i < 8 ? 0 : 1, ...(opts[i] || {}),
}));
const ALFA = mkPlatoon('A', [
['VANCE, T.','3104','O+',88], ['HOLLOWAY, M.','7726','A+',84], ['DRISCOLL, K.','0119','O-',96], ['SANTIAGO, R.','4482','B+',90],
['MERCER, J.','5533','A-',92], ['OYELARAN, D.','8810','O+',85], ['KOWALSKI, P.','2267','AB+',83], ['THIBODEAUX, L.','9941','O-',81],
['ASHWORTH, B.','6075','A+',89], ['NGUYEN, H.','1348','B-',80], ['REINHOLT, C.','7702','O+',94], ['BARLOW, S.','3396','A+',87],
['FITZGERALD, E.','4410','O+',91], ['OKONKWO, I.','8823','AB-',82], ['CALDER, N.','5561','O-',86], ['PRZYBYLSKI, A.','2094','B+',88],
], {
4: { evac:'urgent', triage:'immediate', mechanism:['GSW','Blast'], allergies:'SULFA',
injuries:[{view:'front',x:78,y:295,type:'gsw'},{view:'front',x:130,y:200,type:'gsw'}],
tourniquets:{ ...EMPTY_TQ(), rLeg:{active:true,type:'SOF-T WIDE',time:'0212',position:'Proximal'} },
vitals:[{time:'0208',hr:'132',sbp:'88',dbp:'56',rr:'24',spo2:'93',pain:'9'},{time:'0216',hr:'120',sbp:'96',dbp:'62',rr:'22',spo2:'95',pain:'6'},{time:'0224',hr:'112',sbp:'102',dbp:'66',rr:'18',spo2:'97',pain:'4'}],
draftVitals:{hr:'112',sbp:'102',dbp:'66',rr:'18',spo2:'97',pain:'4'}, avpu:'V',
interventions:['M:Tourniquet applied','M:TXA 2g IV/IO','C:IO humeral','C:Whole blood started','C:Calcium 1g IV after 1st unit','H:HPMK applied','P:Ketamine IV/IO 20–30 mg','A2:Ertapenem 1 g IV/IM'],
medsGiven:[{id:1,time:'0213',name:'TXA',dose:'2 g IV'},{id:2,time:'0219',name:'Ketamine IV',dose:'30 mg'}], fluidsGiven:[{id:1,time:'0217',type:'LTOWB',vol:'500'}],
pain:{rung:'severe'}, abx:{erta:true}, ammo:'red',
notes:'0210: Contact during infil, GSW R thigh + L flank. SOF-T high on R thigh, bleeding controlled. Humeral IO, TXA 2 g, LTOWB from walking blood bank (CALDER O-). HPMK on. Exfil to boat lane 2.' },
10: { evac:'priority', triage:'delayed', mechanism:['Blast','Burn','IED'], injuries:[{view:'front',x:100,y:180,type:'shrap'}], burnedRegions:['f-rArm','f-chest','f-head'],
vitals:[{time:'0211',hr:'114',sbp:'120',dbp:'78',rr:'24',spo2:'95',pain:'8'},{time:'0225',hr:'102',sbp:'124',dbp:'80',rr:'20',spo2:'96',pain:'5'}], draftVitals:{hr:'102',sbp:'124',dbp:'80',rr:'20',spo2:'96',pain:'5'},
interventions:['A:Sit-up & lean-forward','R:SpO₂ monitored','C:IV 18g established','H:Remove wet / burned clothing','H:HPMK applied','W:Burns covered dry sterile','P:Fentanyl OTFC 800 mcg'],
medsGiven:[{id:1,time:'0214',name:'Fentanyl OTFC',dose:'800 mcg'}], fluidsGiven:[{id:1,time:'0220',type:'LR',vol:'500'}],
burn:{ formula:'rule10', burnTime:'0206', inhal:true, circ:false, uop:[], care:['Stop','Airway','Assess','Wounds','Hypothermia'] }, pain:{rung:'moderate'}, equip:'amber',
notes:'0208: Secondary device at breach point. Flash burns face / R arm / ant chest, singed brows — airway watch. Frag L abdomen, no evisceration.' },
15: { evac:'routine', triage:'minimal', mechanism:['Blast'], vitals:[{time:'0220',hr:'94',sbp:'130',dbp:'84',rr:'16',spo2:'98',pain:'4'}], draftVitals:{hr:'94',sbp:'130',dbp:'84',rr:'16',spo2:'98',pain:'4'},
tbi:{ loc:true, aoc:true, headache:true }, interventions:['H:TBI screen (MACE 2)','P:Acetaminophen 1 g PO + Meloxicam 15 mg PO'], pain:{rung:'mild'},
notes:'0209: Close to breach charge, briefly dazed. HA 4/10, pupils equal, no vomiting. Pulled from assault element, monitoring.' },
1: { ammo:'amber' }, 9: { ammo:'amber' }, 12: { equip:'amber' },
});
const BRAVO = mkPlatoon('B', [
['LINDQVIST, O.','2201','A+',87], ['ABERNATHY, W.','6612','O+',85], ['ROURKE, F.','0388','B+',95], ['DELGADO, M.','7745','O-',89],
['HAYES, C.','1190','A-',90], ['ESPOSITO, V.','4437','O+',84], ['MACALLISTER, G.','9026','AB+',82], ['SUNDBERG, E.','3351','O+',86],
['WHITFIELD, J.','8804','B-',91], ['TANAKA, R.','5589','A+',80], ['OBRIEN, D.','2273','O+',93], ['MARCHETTI, L.','6640','O-',88],
['RASMUSSEN, K.','1017','A+',87], ['ADEYEMI, T.','7752','B+',84], ['STEIN, P.','4498','O+',86], ['VILLANUEVA, A.','9930','AB-',83],
], { 6: { evac:'routine', triage:'minimal', mechanism:['Fall'], injuries:[{view:'back',x:60,y:390,type:'frac'}], interventions:['S:SAM splint applied','S:Distal CSM checked','P:Acetaminophen 1 g PO + Meloxicam 15 mg PO'], pain:{rung:'mild'}, vitals:[{time:'0130',hr:'88',sbp:'128',dbp:'82',rr:'14',spo2:'99',pain:'5'}], draftVitals:{hr:'88',sbp:'128',dbp:'82',rr:'14',spo2:'99',pain:'5'}, notes:'0128: Slipped on ladder during boat transfer, L ankle inversion — likely fx, splinted, ambulatory with assist.' }, 3: { ammo:'amber' } });
const CHARLIE = mkPlatoon('C', [
['PARRISH, N.','3319','O+',90], ['ISHIKAWA, S.','8861','A+',82], ['GALLAGHER, B.','0074','O-',97], ['MORALES, E.','5520','B+',88],
['BRENNAN, T.','2298','O+',89], ['KOVAC, M.','7714','A-',85], ['LUND, H.','4463','O+',87], ['DUBOIS, R.','9905','AB+',83],
['SCHAEFER, K.','1136','O-',92], ['ANAND, V.','6672','B-',81], ['CORRIGAN, P.','3348','A+',94], ['YAMADA, J.','8817','O+',86],
['HOLT, D.','5594','A+',88], ['BAPTISTE, L.','2260','O+',85], ['FERRARO, S.','7739','B+',90], ['NORDSTROM, E.','4402','O-',84],
], { 11: { equip:'red' } });
window.UNIT_PROFILE = {
key: 'tccc360-seal-v1',
brand: <><b>TCCC</b> · SEAL PLATOON VIEW · 360</>,
appClass: 'seal',
unitShort: 'PLT', paxLabel: 'SEAL PLT · 16 PAX', boardTitle: 'SEAL PLATOON STATUS BOARD',
leaderLbl: 'CHIEF', medicLbl: 'HM', leader: 'SOCS K. DRISCOLL', medic: 'SO2 L. THIBODEAUX (SOCM)', opName: 'TRIDENT LANTERN',
pax: 16, squads: SQUADS, billets: SEAL_BILLETS, blankUnit: 'ST-3 · PLT',
blankTitle: 'Blank 16-man SEAL platoon', blankDesc: 'Empty, fillable platoon — OIC, AOIC, Chief, LPO and two 8-man squads (SO1/SO2/SO3 billets). Enter names, last-4, blood types and weights in the casualty header.',
blankConfirm: 'Start a blank 16-man platoon? All names, blood types and casualty data in this platoon will be cleared.',
resetConfirm: 'Reset the whole Team to the sample platoons?',
teamName: 'SEAL TEAM 3',
platoons: [ { id: 'A', name: 'ALFA', team: ALFA }, { id: 'B', name: 'BRAVO', team: BRAVO }, { id: 'C', name: 'CHARLIE', team: CHARLIE } ],
defaultPlatoon: 'A', defaultSelected: 'A05',
migrate: null,
};