import { toTitleCase } from 'common/string';
import { Fragment } from 'inferno';
import { useBackend } from '../backend';
import { Box, Button, Flex, LabeledList, ProgressBar, Section } from '../components';
import { Window } from '../layouts';
/* Helpers */
const getDockingStatus = (docking_status, docking_override) => {
let main = 'ERROR';
let color = 'bad';
let showsOverride = false;
if (docking_status === 'docked') {
main = 'DOCKED';
color = 'good';
} else if (docking_status === 'docking') {
main = 'DOCKING';
color = 'average';
showsOverride = true;
} else if (docking_status === 'undocking') {
main = 'UNDOCKING';
color = 'average';
showsOverride = true;
} else if (docking_status === 'undocked') {
main = 'UNDOCKED';
color = '#676767';
}
if (showsOverride && docking_override) {
main = main + '-MANUAL';
}
return {main};
};
/* Templates */
const ShuttleControlSharedShuttleStatus = (props, context) => {
const { act, data } = useBackend(context);
const { engineName = 'Bluespace Drive' } = props;
const {
shuttle_status,
shuttle_state,
has_docking,
docking_status,
docking_override,
docking_codes,
} = data;
return (
{shuttle_status}
{(shuttle_state === 'idle' && (
IDLE
)) ||
(shuttle_state === 'warmup' && (
SPINNING UP
)) ||
(shuttle_state === 'in_transit' && (
ENGAGED
)) || ERROR}
{(has_docking && (
{getDockingStatus(docking_status, docking_override)}
)) ||
null}
);
};
const ShuttleControlSharedShuttleControls = (props, context) => {
const { act, data } = useBackend(context);
const { can_launch, can_cancel, can_force } = data;
return (
);
};
const ShuttleControlConsoleDefault = (props, context) => {
const { act, data } = useBackend(context);
return (
);
};
const ShuttleControlConsoleMulti = (props, context) => {
const { act, data } = useBackend(context);
const { can_cloak, can_pick, legit, cloaked, destination_name } = data;
return (
{(can_cloak && (
)) ||
null}
);
};
const ShuttleControlConsoleExploration = (props, context) => {
const { act, data } = useBackend(context);
const { can_pick, destination_name, fuel_usage, fuel_span, remaining_fuel } =
data;
return (
{(fuel_usage && (
{remaining_fuel} m/s
{fuel_usage} m/s
)) ||
null}
);
};
/* Ugh. Just ugh. */
const ShuttleControlConsoleWeb = (props, context) => {
const { act, data } = useBackend(context);
const {
autopilot,
can_rename,
shuttle_state,
is_moving,
skip_docking,
docking_status,
docking_override,
shuttle_location,
can_cloak,
cloaked,
can_autopilot,
routes,
is_in_transit,
travel_progress,
time_left,
doors,
sensors,
} = data;
return (
{(autopilot && (
This vessel will start and stop automatically. Ensure that all
non-cycling capable hatches and doors are closed, as the automated
system may not be able to control them. Docking and flight controls
are locked. To unlock, disable the automated flight system.
)) ||
null}
act('rename_command')}>
Rename
)) ||
null
}>
{(shuttle_state === 'idle' && (
IDLE
)) ||
(shuttle_state === 'warmup' && (
SPINNING UP
)) ||
(shuttle_state === 'in_transit' && (
ENGAGED
)) || ERROR}
{(!is_moving && (
{toTitleCase(shuttle_location)}
{(!skip_docking && (
}>
{getDockingStatus(docking_status, docking_override)}
)) ||
null}
{(can_cloak && (
)) ||
null}
{(can_autopilot && (
)) ||
null}
)) ||
null}
{(!is_moving && (
{(routes.length &&
routes.map((route) => (
))) || (
No routes found.
)}
)) ||
null}
{(is_in_transit && (
)) ||
null}
{(Object.keys(doors).length && (
{Object.keys(doors).map((key) => {
let door = doors[key];
return (
{(door.open && (
Open
)) || (
Closed
)}
-
{(door.bolted && (
Bolted
)) || (
Unbolted
)}
);
})}
)) ||
null}
{(Object.keys(sensors).length && (
{Object.keys(sensors).map((key) => {
let sensor = sensors[key];
if (sensor.reading === -1) {
return (
Unable to get sensor air reading.
);
}
return (
{sensor.pressure}kPa
{sensor.temp}°C
{sensor.oxygen}%
{sensor.nitrogen}%
{sensor.carbon_dioxide}%
{sensor.phoron}%
{(sensor.other && (
{sensor.other}%
)) ||
null}
);
})}
)) ||
null}
);
};
// This may look tempting to convert to require() or some kind of dynamic call
// Don't do it. XSS abound.
const SubtemplateList = {
'ShuttleControlConsoleDefault': ,
'ShuttleControlConsoleMulti': ,
'ShuttleControlConsoleExploration': ,
'ShuttleControlConsoleWeb': ,
};
export const ShuttleControl = (props, context) => {
const { act, data } = useBackend(context);
const { subtemplate } = data;
return (
{SubtemplateList[subtemplate]}
);
};