public async Task <IActionResult> Put(int phaseId, [FromBody] SpecificParameter specificParameter)
        {
            var(status, stringErro) = await _specificPhaseService.UpdateSpecificParameter(phaseId, specificParameter);

            if (status == null)
            {
                return(StatusCode(500, stringErro));
            }

            return(Ok());
        }
        public async Task <IActionResult> Post([FromBody] SpecificParameter specificParameter)
        {
            var specificParameterCreated = await _specificPhaseService.AddParameter(specificParameter);

            if (specificParameter == null)
            {
                return(StatusCode(500, string.Empty));
            }

            return(Created($"api/specificPhase/{specificParameter.thingGroupId}", specificParameter));
        }
        public async Task <SpecificPhase> GetSpecificPhase(int phaseId)
        {
            SpecificPhase specificPhase = new SpecificPhase();

            specificPhase.parameters = new List <SpecificParameter>();
            var phase = await _otherApiService.GetPhase(phaseId);

            var phaseParameters = phase.phaseParameters.ToList();

            var phaseParameterDistinct = phaseParameters.GroupBy(x => x.tag.tagGroup);

            foreach (var phaseParameterGroup in phaseParameterDistinct)
            {
                SpecificParameter specificParameter = new SpecificParameter();

                foreach (var phaseParameter in phaseParameterGroup)
                {
                    specificParameter.tagGroup     = phaseParameter.tag.tagGroup;
                    specificParameter.thingGroupId = phaseParameter.tag.thingGroupId;

                    switch (phaseParameter.tag.tagDescription)
                    {
                    case "vn":
                        specificParameter.value = phaseParameter.setupValue;
                        break;

                    case "lse":
                        specificParameter.LSE = phaseParameter.setupValue;
                        break;

                    case "lsc":
                        specificParameter.LSC = phaseParameter.setupValue;
                        break;

                    case "lic":
                        specificParameter.LIC = phaseParameter.setupValue;
                        break;

                    case "lie":
                        specificParameter.LIE = phaseParameter.setupValue;
                        break;

                    case "unidade":
                        specificParameter.Unit = phaseParameter.setupValue;
                        break;
                    }
                }

                specificPhase.parameters.Add(specificParameter);
            }

            return(specificPhase);
        }
        public async Task <SpecificParameter> AddParameter(SpecificParameter specificParameter)
        {
            var thingGroup = await _otherApiService.GetThingGroup(specificParameter.thingGroupId);

            List <PhaseParameter> PhaseParameterList = new List <PhaseParameter>();
            // LSE
            var parameterLSE = ReturnIdTag(specificParameter.tagGroup, "lse", thingGroup.tags.ToList());

            parameterLSE.setupValue = specificParameter.LSE.ToString();
            PhaseParameterList.Add(parameterLSE);
            //LSC
            var parameterLSC = ReturnIdTag(specificParameter.tagGroup, "lsc", thingGroup.tags.ToList());

            parameterLSC.setupValue = specificParameter.LSC.ToString();
            PhaseParameterList.Add(parameterLSC);
            //LIC
            var parameterLIC = ReturnIdTag(specificParameter.tagGroup, "lic", thingGroup.tags.ToList());

            parameterLIC.setupValue = specificParameter.LIC.ToString();
            PhaseParameterList.Add(parameterLIC);
            //LIE
            var parameterLIE = ReturnIdTag(specificParameter.tagGroup, "lie", thingGroup.tags.ToList());

            parameterLIE.setupValue = specificParameter.LIE.ToString();
            PhaseParameterList.Add(parameterLIE);
            //Nominal
            var parameterVN = ReturnIdTag(specificParameter.tagGroup, "vn", thingGroup.tags.ToList());

            parameterVN.setupValue = specificParameter.value.ToString();
            PhaseParameterList.Add(parameterVN);
            //unidade
            var parameterUN = ReturnIdTag(specificParameter.tagGroup, "unidade", thingGroup.tags.ToList());

            parameterUN.setupValue = specificParameter.Unit.ToString();
            PhaseParameterList.Add(parameterUN);

            foreach (var phaseParameter in PhaseParameterList)
            {
                var phaseParameterCreated = await _otherApiService.PostPhaseParameter(phaseParameter);
            }

            return(specificParameter);
        }
        public async Task <(bool, string)> DeleteSpecificParameter(int phaseId, SpecificParameter specificParameter)
        {
            var phase = await _otherApiService.GetPhase(phaseId);

            var phaseParameterList = phase.phaseParameters.ToList();

            var phaseParameterDistinct = phaseParameterList.GroupBy(x => x.tag.tagGroup);

            var phaseParameterDeleteList = phaseParameterDistinct.Where(x => x.Key == specificParameter.tagGroup).FirstOrDefault();

            foreach (var phaseParameter in phaseParameterDeleteList)
            {
                if (!await _otherApiService.DeletePhaseParameter(phaseId, phaseParameter))
                {
                    return(false, "Erro in Delete Tag");
                }
            }
            return(true, string.Empty);
        }
        public async Task <(SpecificParameter, string)> UpdateSpecificParameter(int phaseId, SpecificParameter specificParameter)
        {
            var(status, stringErro) = await DeleteSpecificParameter(phaseId, specificParameter);

            if (status)
            {
                specificParameter = await AddParameter(specificParameter);

                return(specificParameter, string.Empty);
            }
            return(specificParameter, stringErro);
        }