using LoaderCalculator;
using LoaderCalculator.Data.Ndms;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Services.Forces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StructureHelperLogics.NdmCalculations.Cracking
{
    public class IsSectionCrackedByFactorLogic : IIsSectionCrackedByFactorLogic
    {
        private IForceTupleServiceLogic forceTupleServiceLogic;
        private IForceTupleServiceLogic ForceTupleServiceLogic => forceTupleServiceLogic ??= new ForceTupleServiceLogic();
        public IIsSectionCrackedByForceLogic IsSectionCrackedByForceLogic { get; set; }
        public IForceTuple StartTuple { get; set; }
        public IForceTuple EndTuple { get; set; }
        public IShiftTraceLogger? TraceLogger { get; set; }

        public IsSectionCrackedByFactorLogic(IIsSectionCrackedByForceLogic sectionLogic)
        {
            IsSectionCrackedByForceLogic = sectionLogic;
        }

        public IsSectionCrackedByFactorLogic() : this(new IsSectionCrackedByForceLogic())
        {
            
        }

        public bool IsSectionCracked(double factor)
        {
            IsSectionCrackedByForceLogic.TraceLogger ??= TraceLogger?.GetSimilarTraceLogger(50);
            var actualTuple = ForceTupleServiceLogic.InterpolateTuples(StartTuple, EndTuple, factor);
            IsSectionCrackedByForceLogic.ForceTuple = actualTuple;
            return IsSectionCrackedByForceLogic.IsSectionCracked();
        }
    }
}
