// SPDX-FileCopyrightText: 2024 deltanedas <39013340+deltanedas@users.noreply.github.com>
// SPDX-FileCopyrightText: 2024 deltanedas <@deltanedas:kde.org>
// SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
using Content.Shared._Shitmed.Autodoc.Systems;
using Content.Shared.DeviceLinking;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
namespace Content.Shared._Shitmed.Autodoc.Components;
///
/// God component for autodoc.
///
[RegisterComponent, NetworkedComponent, Access(typeof(SharedAutodocSystem))]
[AutoGenerateComponentState]
public sealed partial class AutodocComponent : Component
{
[DataField]
public ProtoId OperatingTablePort = "OperatingTableReceiver";
///
/// The linked operating table.
/// Autodocs require a linked operating table to be used.
///
[DataField, AutoNetworkedField]
public EntityUid? OperatingTable;
[DataField, AutoNetworkedField]
public List Programs = new();
///
/// Requires that the patient be asleep for forced vulnerability.
/// Can be disabled to operate on awake patients.
///
[DataField, AutoNetworkedField]
public bool RequireSleeping = true;
///
/// The hand to hold surgery-specific items in (organs etc).
/// After an operation this gets put back into storage.
///
[DataField]
public string ItemSlot = "surgery_specific";
///
/// How long to wait between processing program steps while active.
///
[DataField]
public TimeSpan UpdateDelay = TimeSpan.FromSeconds(0.5);
///
/// The maximum number of programs this autodoc can have.
///
[DataField]
public int MaxPrograms = 16;
///
/// How long a program title is allowed to be.
///
public int MaxProgramTitleLength = 20;
///
/// The maximum number of steps a program can have.
///
[DataField]
public int MaxProgramSteps = 16;
}
[Serializable, NetSerializable]
public enum AutodocWireStatus : byte
{
PowerIndicator,
SafetyIndicator
}