using SuperStarTrek.Resources;
using SuperStarTrek.Space;

namespace SuperStarTrek.Objects
{
    internal class Starbase
    {
        private readonly Input _input;
        private readonly Output _output;
        private readonly float _repairDelay;

        internal Starbase(Coordinates sector, Random random, Input input, Output output)
        {
            Sector = sector;
            _repairDelay = random.GetFloat() * 0.5f;
            _input = input;
            _output = output;
        }

        internal Coordinates Sector { get; }

        public override string ToString() => ">!<";

        internal bool TryRepair(Enterprise enterprise, out float repairTime)
        {
            repairTime = enterprise.DamagedSystemCount * 0.1f + _repairDelay;
            if (repairTime >= 1) { repairTime = 0.9f; }

            _output.Write(Strings.RepairEstimate, repairTime);
            if (_input.GetYesNo(Strings.RepairPrompt, Input.YesNoMode.TrueOnY))
            {
                foreach (var system in enterprise.Systems)
                {
                    system.Repair();
                }
                return true;
            }

            repairTime = 0;
            return false;
        }

        internal void ProtectEnterprise() => _output.WriteLine(Strings.Protected);
    }
}
