namespace InABox.Logikal
{
    public interface ILogikalPartsResponse<TFinish, TProfile, TComponent, TGlass, TLabour>
        where TFinish : ILogikalFinish
        where TProfile : ILogikalProfile
        where TComponent : ILogikalComponent
        where TGlass : ILogikalGlass
        where TLabour : ILogikalLabour
    {
        TFinish[] Finishes { get; set; }
        TProfile[] Profiles { get; set; }
        TComponent[] Components { get; set; }
        TGlass[] Glass { get; set; }
        TLabour[] Labour { get; set; }
        byte[] ExcelData { get; set; }
    }

    public abstract class AbstractLogikalPartsResponse<TFinish, TProfile, TComponent, TGlass, TLabour> : LogikalResponse, ILogikalPartsResponse<TFinish, TProfile, TComponent, TGlass, TLabour>
        where TFinish : ILogikalFinish
        where TProfile : ILogikalProfile
        where TComponent : ILogikalComponent
        where TGlass : ILogikalGlass
        where TLabour : ILogikalLabour
    {

        public TFinish[] Finishes { get; set; }
        
        public TProfile[] Profiles { get; set; }

        public TComponent[] Components { get; set; }

        public TGlass[] Glass { get; set; }

        public TLabour[] Labour { get; set; }

        public byte[] ExcelData { get; set; }

        public override string ToString() => $"{Finishes?.Length ?? 0} Finishes / {Profiles?.Length ?? 0} Profiles / {Components?.Length ?? 0} Components / {Glass?.Length ?? 0} Glass/ {Labour?.Length ?? 0} Activities  found";
    }


}