using PlantBox.Shared.Communication.Commands;
using System;
using System.Collections.Generic;
using System.Text;

namespace PlantBox.Broker
{
    class PlantBox
    {
        // General Info
        public ulong ID { get; set; }
        public string Name { get; set; }
        public PlantType Type { get; set; }
        public PlantState State { get; set; }

        // Captors
        public DateTime LastMeasureDate { get; set; }
        public double TankLevel { get; set; }
        public CaptorValue Humidity { get; set; }
        public CaptorValue Luminosity { get; set; }
        public CaptorValue Temperature { get; set; }

        // Historic
        public HistoricManager HistoricManager { get; set; }

        // State conditions
        public void UpdateState()
        {
            bool IsDay()
            {
                double hour = DateTime.Now.Hour;

                return hour > 8 && hour < 20;
            }

            if (Humidity.Value < Humidity.Min || Humidity.Value > Humidity.Max)
            {
                State = PlantState.Warning;
            }
            if (IsDay() && Luminosity.Value < Luminosity.Min || Luminosity.Value > Luminosity.Max)
            {
                State = PlantState.Warning;
            }
            if (Temperature.Value < Temperature.Min || Temperature.Value > Temperature.Max)
            {
                State = PlantState.Warning;
            }
            if (TankLevel < 20)
            {
                State = PlantState.Warning;
            }
            if ((DateTime.Now - LastMeasureDate).TotalMinutes >= 7)
            {
                State = PlantState.Bad;
            }
        }

        public override string ToString()
        {
            return $"{ID}:\n    Name: {Name}\n    Type: {Type}\n    State: {State}";
        }
    }
}
