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
{
///
/// Default bomb timer value in seconds.
///
[DataField("timer")]
[ViewVariables(VVAccess.ReadWrite)]
public int Timer = 180;
///
/// The that stores the nuclear disk. The entity whitelist, sounds, and some other
/// behaviours are specified by this definition. Make sure the whitelist, is correct
/// otherwise a blank bit of paper will work as a "disk".
///
[DataField("diskSlot")]
public ItemSlot DiskSlot = new();
///
/// 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;
///
/// 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;
}
}