//[HttpPost("register")]
        //public async Task<ActionResult<CommandItem>> PostRegister([FromBody] ApiUser item)
        //{
        //    try
        //    {
        //        _iDataSingleton.AddErrorLog(new ErrorLog()
        //        {
        //            LogLevel = LogLevel.Debug,
        //            MsgDateTime = DateTime.Now,
        //            Message = $"{typeof(ValuesController)}:PostRegister => {item}"
        //        });

        //        var user = new ApplicationUser
        //            {UserName = item.User, Email = item.EMail, LastConnection = DateTime.Now};
        //        var result = await _userManager.CreateAsync(user, item.Password);
        //        if (result.Succeeded)
        //        {
        //            var addRoleResult = await _userManager.AddToRoleAsync(user, "ApiUser");
        //            if (!addRoleResult.Succeeded)
        //            {
        //                _iDataSingleton.AddErrorLog(new ErrorLog()
        //                {
        //                    LogLevel = LogLevel.Error,
        //                    MsgDateTime = DateTime.Now,
        //                    Message = $"{typeof(ValuesController)}:PostRegister => Couldn't add User to ApiUser."
        //                });
        //                return BadRequest();
        //            }
        //        }
        //        else
        //        {
        //            _iDataSingleton.AddErrorLog(new ErrorLog()
        //            {
        //                LogLevel = LogLevel.Error,
        //                MsgDateTime = DateTime.Now,
        //                Message = $"{typeof(ValuesController)}:PostRegister => Couldn't create User."
        //            });
        //            return BadRequest();
        //        }

        //        return Ok();
        //    }
        //    catch (Exception e)
        //    {
        //        _iDataSingleton.AddErrorLog(new ErrorLog()
        //        {
        //            LogLevel = LogLevel.Error,
        //            MsgDateTime = DateTime.Now,
        //            Message = $"{typeof(ValuesController)}:PostRegister Exception => {e}"
        //        });
        //        return BadRequest();
        //    }
        //}

        // [HttpPost("login")]
        // public async Task<ActionResult<CommandItem>> PostLogin([FromBody] CommandItem item)
        // {
        //     try
        //     {
        //         _iDataSingleton.AddErrorLog(new ErrorLog()
        //         {
        //             LogLevel = LogLevel.Debug,
        //             MsgDateTime = DateTime.Now,
        //             Message = $"{typeof(ValuesController)}:PostCommandItem => {item}"
        //         });
        //
        //
        //         return Ok();
        //     }
        //     catch (Exception e)
        //     {
        //         _iDataSingleton.AddErrorLog(new ErrorLog()
        //         {
        //             LogLevel = LogLevel.Error,
        //             MsgDateTime = DateTime.Now,
        //             Message = $"{typeof(ValuesController)}:PostCommandItem Exception => {e}"
        //         });
        //         return NotFound();
        //     }
        // }

        #endregion

        #region Private Methods

        /// <summary>
        /// This method handles the different commands.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private async Task <ActionResult <AnswerModel> > CommandItemHandler(CommandItem item)
        {
            switch (item.Command)
            {
            case Command.OpenDoor:
                // await _openHab.PostData(_iDataSingleton.GetSettings().DoorOpenHabLink, "ON", true);
                return(Accepted(new AnswerModel()
                {
                    Answer = CommandValueAnswer.GateOpening.ToString()
                }));

            case Command.OpenGate:
                switch (_iDataSingleton.GetSystemStatus().GateStatus)
                {
                case GateStatus.GateOpen:
                    if (_iDataSingleton.GetSystemStatus().IsAutoMode)
                    {
                        if (item.CommandValue.Equals(CommandValue.Open))
                        {
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpen + " but gate is closing automatically!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.ForceOpen))
                        {
                            _iDataSingleton.SetAutoGate(false);
                            // _autoCloseTimer.Stop();
                            _iDataSingleton.GetSystemStatus().IsAutoMode = false;
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpen + " but auto gate closing was turned off!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.Close))
                        {
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpen + " but gate will close after auto mode timeout!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.ForceClose))
                        {
                            _iDataSingleton.SetAutoGate(false);
                            // _autoCloseTimer.Stop();
                            _iDataSingleton.GetSystemStatus().IsAutoMode   = false;
                            _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                            await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.GateClosing + " auto gate closing was turned off!"
                            }));
                        }
                    }

                    if (item.CommandValue.Equals(CommandValue.Open) ||
                        item.CommandValue.Equals(CommandValue.ForceOpen))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.AlreadyOpen.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.Close) ||
                             item.CommandValue.Equals(CommandValue.ForceClose))
                    {
                        _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateClosing.ToString()
                        }));
                    }

                    break;

                case GateStatus.GateOpening:
                    if (_iDataSingleton.GetSystemStatus().IsAutoMode)
                    {
                        if (item.CommandValue.Equals(CommandValue.Open))
                        {
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpening + " but gate is closing automatically!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.ForceOpen))
                        {
                            _iDataSingleton.SetAutoGate(false);
                            // _autoCloseTimer.Stop();
                            _iDataSingleton.GetSystemStatus().IsAutoMode = false;
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpening + " but auto gate closing was turned off!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.Close))
                        {
                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.AlreadyOpening + " but gate will close after auto mode timeout!"
                            }));
                        }

                        if (item.CommandValue.Equals(CommandValue.ForceClose))
                        {
                            _iDataSingleton.SetAutoGate(false);
                            // _autoCloseTimer.Stop();
                            _iDataSingleton.GetSystemStatus().IsAutoMode   = false;
                            _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                            await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                            Thread.Sleep(500);
                            await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                            return(Accepted(new AnswerModel()
                            {
                                Answer = CommandValueAnswer.GateClosing + " auto gate closing turned off gate is closing right now!"
                            }));
                        }
                    }

                    if (item.CommandValue.Equals(CommandValue.Open) ||
                        item.CommandValue.Equals(CommandValue.ForceOpen))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateOpening.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.Close))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateOpening.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.ForceClose))
                    {
                        _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        Thread.Sleep(500);
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateClosing.ToString()
                        }));
                    }

                    break;

                case GateStatus.GateClosed:
                    if (item.CommandValue.Equals(CommandValue.Open) ||
                        item.CommandValue.Equals(CommandValue.ForceOpen))
                    {
                        _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateOpening.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.Close) ||
                             item.CommandValue.Equals(CommandValue.ForceClose))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.AlreadyClosed.ToString()
                        }));
                    }

                    break;

                case GateStatus.GateClosing:
                    if (item.CommandValue.Equals(CommandValue.Close) ||
                        item.CommandValue.Equals(CommandValue.ForceClose))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateClosing.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.Open))
                    {
                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateClosing.ToString()
                        }));
                    }
                    else if (item.CommandValue.Equals(CommandValue.ForceOpen))
                    {
                        _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        Thread.Sleep(500);
                        await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                        return(Accepted(new AnswerModel()
                        {
                            Answer = CommandValueAnswer.GateOpening.ToString()
                        }));
                    }
                    break;

                default:
                    return(NotFound());
                }
                break;

            case Command.OpenGateAuto:
                switch (_iDataSingleton.GetSystemStatus().GateStatus)
                {
                case GateStatus.GateOpen:
                    return(Accepted(new AnswerModel()
                    {
                        Answer = CommandValueAnswer.AlreadyOpen.ToString()
                    }));

                case GateStatus.GateOpening:
                    return(Accepted(new AnswerModel()
                    {
                        Answer = CommandValueAnswer.AlreadyOpening.ToString()
                    }));

                case GateStatus.GateClosed:
                    _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                    _iDataSingleton.GetSystemStatus().IsAutoMode   = true;
                    await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                    StartAutoCloseTimer();
                    return(Accepted(new AnswerModel()
                    {
                        Answer = CommandValueAnswer.GateOpening.ToString() + " and gate will close automatically!"
                    }));

                case GateStatus.GateClosing:
                    _iDataSingleton.GetSystemStatus().IsGateMoving = true;
                    _iDataSingleton.GetSystemStatus().IsAutoMode   = true;
                    await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                    Thread.Sleep(500);
                    await _openHab.PostData(_iDataSingleton.GetSettings().GateOpenHabLink, "ON", true);

                    StartAutoCloseTimer();
                    return(Accepted(new AnswerModel()
                    {
                        Answer = CommandValueAnswer.GateOpening.ToString()
                    }));

                default:
                    return(NotFound());
                }
            }

            return(NotFound());
        }
 public async Task <string> GetDoorStatus()
 {
     return(await _openHab.GetData(_dataSingleton.GetSettings().StatusOpenHabLink));
 }