// Copyright © Selmo Technology GmbH. All Rights Reserved

using Novus.Connectivity.Common;
using Novus.Connectivity.Service;
using SelmoStudio.Hmi.Common.SelmoProject.ProcessValue;
using SelmoStudio.Hmi.Server.SelmoHmi.Cmz.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Model.Dtos;
using SelmoStudio.Hmi.Server.SelmoHmi.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Parameter.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Plant.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Sequence.Model;
using SelmoStudio.Hmi.Server.SelmoHmi.Sequence.Model.Dto;
using SelmoStudio.Hmi.Server.SelmoHmi.Sequence.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Shared.Model;

namespace SelmoStudio.Hmi.Server.ProcessValue.Services
{
    public interface IProcessValueInfoService
    {
        ProcessValuesPlant PlantProcessInfo { get; set; }

        public void Init(ProcessValuesPlant plantDefinition);

        public ProcessValuesZoneInfo GetProcessValueInfo(ZoneId id, SequenceId seqId);

        public IProcessValueInfo GetProcessValueInfo(CmzId id, SequenceId seqId);

        public IProcessValueInfo GetProcessValueInfo(CmzId id, HardwareZoneId hwId);

        public IProcessValueInfo GetProcessValueInfo(CmzId id, PlantId plantId);

        public ProcessValuesPlant GetProcessValueInfo();

        public ProcessValuesHardwareZone GetProcessValueInfo(HardwareZoneId id);

        public ProcessValuesSequence GetProcessValueInfo(SequenceId id);

        public ValuesConnectionRegistration CreateParameterRegistration(List<ParameterId> paramIds, SequenceId seqId);

        public ValuesConnectionRegistration CreateParameterRegistration(List<ParameterId> paramIds, HardwareZoneId hwId);

        public ValuesConnectionRegistration CreateParameterRegistration(List<ParameterId> paramIds);

        public Dictionary<ParameterId, ProcessValueId> GetParameterLookupTable(List<ParameterId> paramIds, SequenceId seqId);

        public Dictionary<ParameterId, ProcessValueId> GetParameterLookupTable(List<ParameterId> paramIds, HardwareZoneId hwId);

        public Dictionary<ParameterId, ProcessValueId> GetParameterLookupTable(List<ParameterId> paramIds);

        public ValuesConnectionRegistration CreateHwZoneRegistration(HardwareZoneId id, List<HardwareZoneInfoDto> infos);

        public ValuesConnectionRegistration CreateSequenceRegistrationStepCounterAndZones(SequenceId id);

        public ValuesConnectionRegistration CreateSequenceRegistrationWithoutStepCounter(SequenceId id);

        public ValuesConnectionRegistration CreateZoneHMIButtonRegistration(List<ZoneId> ids, SequenceId seqId);

        public ValuesConnectionRegistration CreateStepMonitoringRegistration(SequenceId id);

        public ValuesConnectionRegistration CreateCmzRegistration(SelmoHmiProject project);

        public Dictionary<CmzId, ProcessValueId> CreateCmzLookUpTable(SelmoHmiProject project);

        public ValuesConnectionRegistration CreatePlantRegistration();

        public Dictionary<ZoneId, ProcessValuesZoneInfo> GetZoneLookupTable(List<ZoneId> zoneIds, SequenceId seqId);

        public Dictionary<HardwareZoneId, List<IProcessValueInfo>> GetLookUpTableForHwStatus(List<HardwareZoneInfoDto> hardwareZoneInfoDtos);

        public ValuesConnectionRegistration CreateSeqStatusRegistration(List<ProjectItemCollectionSequence> sequences);

        public Dictionary<SequenceId, ProcessValuesSequenceStatus> GetLookUpTableForSeqStatus(List<ProjectItemCollectionSequence> projectItemCollectionSequences);

        public Dictionary<SequenceId, List<IProcessValueInfo>> GetLookUpTableForSeqOverview(List<SequenceInfoDto> sequenceInfoDtos);

        public ValuesConnectionRegistration CreateSeqOverviewRegistration(List<SequenceInfoDto> sequenceInfoDtos);

        public Dictionary<SequenceId, ProcessValuesSequence> GetProcessValueInfoLookUpTableOverview(List<SequenceInfoDto> sequenceInfoDtos);

        public Dictionary<StepId, ProcessValueMonitoringStep> GetProcessValueInfoLookUpMonitoringSteps(SequenceId id);

        public Dictionary<StepId, List<IProcessValue>> GetProcessValueLookUpMonitoringSteps(SequenceId id);

        public IProcessValue GetTeachMode(SequenceId id);
    }
}