// Copyright © Selmo Technology GmbH. All Rights Reserved

using SelmoStudio.Hmi.Common.Authentication;
using SelmoStudio.Hmi.Common.SelmoProject;
using SelmoStudio.Hmi.Common.SelmoProject.ProcessValueDefinition;
using SelmoStudio.Hmi.Server.ProcessValue.Model;
using SelmoStudio.Hmi.Server.SelmoHmi.Cmz.Model.Dtos;
using SelmoStudio.Hmi.Server.SelmoHmi.Group.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Model.Dtos;
using SelmoStudio.Hmi.Server.SelmoHmi.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Parameter.Model.Dto;
using SelmoStudio.Hmi.Server.SelmoHmi.Plant.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Sequence.Model.Ids;
using SelmoStudio.Hmi.Server.SelmoHmi.Shared.Model;
using static SelmoStudio.Hmi.Server.SelmoHmi.Shared.TestImpl.TestValuesForDemo;

namespace SelmoStudio.Hmi.Server.SelmoHmi.Shared.Service
{
    public interface IProjectService
    {
        public SelmoHmiProject GetProject();

        public ProcessValuesPlantDefinition GetProcessValueDefinitions();

        public void Reload();

        public List<ProcessInfoDataCollection> GetTestProcessInfoCollections();

        public Task<List<TestProcessValueInfo>> GetProcessValues(SequenceId id);

        public Task<List<TestProcessValueInfo>> GetProcessValues(HardwareZoneId id);

        public Task<List<TestProcessValueInfo>> GetProcessValues(PlantId id);

        public HmiSettings GetHmiSettings();

        public List<CmzDto> GetAllCmzs();

        string GetDefaultLanguageLcidCode();

        IList<string> GetLanguageLcidCodes();

        List<HmiUser> GetUserList();

        Dictionary<GroupId, string> GetUsedParameterGroups(PlantId plantId, SequenceId sequenceId);

        Dictionary<GroupId, string> GetUsedParameterGroups(PlantId plantId, HardwareZoneId hardwareZoneId);

        Dictionary<GroupId, string> GetUsedParameterGroups(PlantId plantId);

        Dictionary<GroupId, string> GetUsedZonesGroups(PlantId plantId, SequenceId sequenceId);

        List<ParameterDto> GetParameters(PlantId plantId, SequenceId sequenceId, GroupId currentGroupId);

        List<ParameterDto> GetParameters(PlantId plantId, HardwareZoneId hardwareZoneId, GroupId currentGroupId);

        List<ParameterDto> GetParameters(PlantId plantId, GroupId currentGroupId);

        List<ZoneDto> GetZones(PlantId plantId, SequenceId sequenceId, GroupId currentGroupId);
    }
}