using Content.Shared.Containers.ItemSlots;
using Content.Shared.Nuke;
using Content.Shared.Sound;
using Robust.Shared.Analyzers;
using Robust.Shared.Audio;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.ViewVariables;
namespace Content.Server.Nuke
{
///
/// Nuclear device that can devistate an entire station.
/// Basicaly a station self-destruction mechanism.
/// To activate it, user needs to insert an authorization disk and enter a secret code.
///
[RegisterComponent]
[Friend(typeof(NukeSystem))]
public class NukeComponent : Component
{
public override string Name => "Nuke";
///
/// Default bomb timer value in seconds.
///
[DataField("timer")]
[ViewVariables(VVAccess.ReadWrite)]
public int Timer = 180;
///
/// Slot name for to store nuclear disk inside bomb.
/// See for mor info.
///
[DataField("slot")]
public string DiskSlotName = "DiskSlot";
///
/// Annihilation radius in which all human players will be gibed
///
[DataField("blastRadius")]
[ViewVariables(VVAccess.ReadWrite)]
public int BlastRadius = 200;
///
/// After this time nuke will play last alert sound
///
[DataField("alertTime")]
public float AlertSoundTime = 10.0f;
[DataField("keypadPressSound")]
public SoundSpecifier KeypadPressSound = new SoundPathSpecifier("/Audio/Machines/Nuke/general_beep.ogg");
[DataField("accessGrantedSound")]
public SoundSpecifier AccessGrantedSound = new SoundPathSpecifier("/Audio/Machines/Nuke/general_beep.ogg");
[DataField("accessDeniedSound")]
public SoundSpecifier AccessDeniedSound = new SoundPathSpecifier("/Audio/Machines/Nuke/angry_beep.ogg");
[DataField("alertSound")]
public SoundSpecifier AlertSound = new SoundPathSpecifier("/Audio/Machines/alarm.ogg");
[DataField("armSound")]
public SoundSpecifier ArmSound = new SoundPathSpecifier("/Audio/Misc/notice1.ogg");
[DataField("disarmSound")]
public SoundSpecifier DisarmSound = new SoundPathSpecifier("/Audio/Misc/notice2.ogg");
///
/// Time until explosion in seconds.
///
[ViewVariables]
public float RemainingTime;
///
/// Does bomb contains valid entity inside ?
/// If it is, user can anchor bomb or enter nuclear code to arm it.
///
[ViewVariables]
public bool DiskInserted = false;
///
/// Curent nuclear code buffer. Entered manually by players.
/// If valid it will allow arm/disarm bomb.
///
[ViewVariables]
public string EnteredCode = "";
///
/// Current status of a nuclear bomb.
///
[ViewVariables]
public NukeStatus Status = NukeStatus.AWAIT_DISK;
///
/// Check if nuke has already played last alert sound
///
public bool PlayedAlertSound = false;
public IPlayingAudioStream? AlertAudioStream = default;
}
}