- type: entity
  parent: [MobObserverBase, InventoryBase]
  id: AdminObserver
  name: admin observer
  categories: [ HideSpawnMenu ]
  components:
  - type: ContentEye
    maxZoom: 8.916104, 8.916104
  - type: Tag
    tags:
    - InstantDoAfters
    - CanPilot
    - BypassInteractionRangeChecks
    - BypassDropChecks
    - BypassOpenStorageLimit
    - NoConsoleSound
    - SilentStorageUser
    - PreventAccessLogging
    - AllowBiomeLoading
    - NotGhostnadoWarpable
    - AllowPortalTraversal
    - PreventPortalCollision
  - type: Input
    context: "aghost"
  - type: Ghost
    canInteract: true
  - type: GhostHearing
  - type: Hands
    hands:
      hand_right:
        location: Right
      hand_left:
        location: Left
    sortedHands:
    - hand_right
    - hand_left
  - type: ComplexInteraction
  - type: Puller
    needsHands: false
  - type: CombatMode
  - type: Physics
    bodyType: Kinematic # Admin ghosts should ignore the laws of physics.
    ignorePaused: true
  - type: Access
    groups:
    - AllAccess
    - Silicon
    tags:
    - NuclearOperative
    - SyndicateAgent
    - CentralCommand
  - type: UserInterface
    interfaces:
      enum.SolarControlConsoleUiKey.Key:
        type: SolarControlConsoleBoundUserInterface
      enum.CommunicationsConsoleUiKey.Key:
        type: CommunicationsConsoleBoundUserInterface
      enum.RadarConsoleUiKey.Key:
        type: RadarConsoleBoundUserInterface
      enum.CargoConsoleUiKey.Orders:
        type: CargoOrderConsoleBoundUserInterface
      enum.CrewMonitoringUIKey.Key:
        type: CrewMonitoringBoundUserInterface
      enum.GeneralStationRecordConsoleKey.Key:
      # who the fuck named this bruh
        type: GeneralStationRecordConsoleBoundUserInterface
  - type: IntrinsicUI
    uis:
      enum.SolarControlConsoleUiKey.Key:
        toggleAction: ActionAGhostShowSolar
      enum.CommunicationsConsoleUiKey.Key:
        toggleAction: ActionAGhostShowCommunications
      enum.RadarConsoleUiKey.Key:
        toggleAction: ActionAGhostShowRadar
      enum.CargoConsoleUiKey.Orders:
        toggleAction: ActionAGhostShowCargo
      enum.CrewMonitoringUIKey.Key:
        toggleAction: ActionAGhostShowCrewMonitoring
      enum.GeneralStationRecordConsoleKey.Key:
        toggleAction: ActionAGhostShowStationRecords
  - type: SolarControlConsole # look ma i AM the computer!
  - type: CommunicationsConsole
    title: comms-console-announcement-title-centcom
    color: "#1d8bad"
    delay: 10
    initialDelay: 0
    global: true
  - type: RadarConsole
    followEntity: true
  - type: CargoOrderConsole
  - type: CrewMonitoringConsole
  - type: GeneralStationRecordConsole
    canDeleteEntries: true
  - type: DeviceNetwork
    deviceNetId: Wireless
    receiveFrequencyId: CrewMonitor
    transmitFrequencyId: ShuttleTimer
  - type: WirelessNetworkConnection
    range: 500
  - type: StationLimitedNetwork
  - type: Thieving
    stripTimeReduction: 9999
    stealthy: true
  - type: Stripping
  - type: SolutionScanner
  - type: IgnoreUIRange
  - type: ShowAntagIcons
  - type: ShowContrabandDetails
  - type: Inventory
    templateId: aghost
  - type: Loadout
    prototypes: [ MobAghostGear ]
  - type: BypassInteractionChecks
  - type: ExplosionResistance
    damageCoefficient: 0
  - type: GluedImmune
  - type: LubedImmune

- type: entity
  abstract: true
  parent: BaseAction
  id: BaseAGhostAction
  components:
  - type: Action
    icon: { sprite: Structures/Machines/parts.rsi, state: box_0 }
    iconOn: { sprite: Structures/Machines/parts.rsi, state: box_2 }
    keywords: [ "AI", "console", "interface" ]
    priority: -10

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowSolar
  name: Solar Control Interface
  description: View a Solar Control Interface.
  components:
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.SolarControlConsoleUiKey.Key }

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowCommunications
  name: Communications Interface
  description: View a Communications Interface.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
    iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
    keywords: [ "AI", "console", "interface" ]
    priority: -4
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.CommunicationsConsoleUiKey.Key }

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowRadar
  name: Mass Scanner Interface
  description: View a Mass Scanner Interface.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner }
    iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console }
    keywords: [ "AI", "console", "interface" ]
    priority: -6
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key }

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowCargo
  name: Cargo Ordering Interface
  description: View a Cargo Ordering Interface.
  components:
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.CargoConsoleUiKey.Orders }

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowCrewMonitoring
  name: Crew Monitoring Interface
  description: View a Crew Monitoring Interface.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor }
    iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor }
    keywords: [ "AI", "console", "interface" ]
    priority: -8
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key }

- type: entity
  parent: BaseAGhostAction
  id: ActionAGhostShowStationRecords
  name: Station Records Interface
  description: View a Station Records Interface.
  components:
  - type: Action
    icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records }
    iconOn: { sprite: Interface/Actions/actions_ai.rsi, state: station_records }
    keywords: [ "AI", "console", "interface" ]
    priority: -7
  - type: InstantAction
    event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key }
