#nullable enable
using Content.Server.GameObjects.Components.Atmos;
using Robust.Shared.GameObjects;
using Robust.Shared.ViewVariables;

namespace Content.Server.GameObjects.Components.Body.Respiratory
{
    [RegisterComponent]
    public class InternalsComponent : Component
    {
        public override string Name => "Internals";
        [ViewVariables] public IEntity? GasTankEntity { get; set; }
        [ViewVariables] public IEntity? BreathToolEntity { get; set; }

        public void DisconnectBreathTool()
        {
            var old = BreathToolEntity;
            BreathToolEntity = null;

            if (old != null && old.TryGetComponent(out BreathToolComponent? breathTool) )
            {
                breathTool.DisconnectInternals();
                DisconnectTank();
            }
        }

        public void ConnectBreathTool(IEntity toolEntity)
        {
            if (BreathToolEntity != null && BreathToolEntity.TryGetComponent(out BreathToolComponent? tool))
            {
                tool.DisconnectInternals();
            }

            BreathToolEntity = toolEntity;
        }

        public void DisconnectTank()
        {
            if (GasTankEntity != null && GasTankEntity.TryGetComponent(out GasTankComponent? tank))
            {
                tank.DisconnectFromInternals(Owner);
            }

            GasTankEntity = null;
        }

        public bool TryConnectTank(IEntity tankEntity)
        {
            if (BreathToolEntity == null)
                return false;

            if (GasTankEntity != null && GasTankEntity.TryGetComponent(out GasTankComponent? tank))
            {
                tank.DisconnectFromInternals(Owner);
            }

            GasTankEntity = tankEntity;
            return true;
        }

        public bool AreInternalsWorking()
        {
            return BreathToolEntity != null &&
                   GasTankEntity != null &&
                   BreathToolEntity.TryGetComponent(out BreathToolComponent? breathTool) &&
                   breathTool.IsFunctional &&
                   GasTankEntity.TryGetComponent(out GasTankComponent? gasTank) &&
                   gasTank.Air != null;
        }

    }
}
