public ActionResult CreateDevice(string buttonSubmit, string nameDevice)
        {
            deviceDataView.DeviceList = GetAllDevices();
            devicesList = deviceDataView.DeviceList;
            Factory factory = new Factory();

            bool nameDouble = devicesList.Exists(device => device.Name == nameDevice);

            if (string.IsNullOrEmpty(nameDevice) == false && nameDouble == false)
            {
                switch (buttonSubmit)
                {
                case "TV":
                {
                    devicesList.Add(factory.CreatorTV(nameDevice));
                    break;
                }

                case "SD":
                {
                    devicesList.Add(factory.CreatorSound(nameDevice));
                    break;
                }

                case "condit":
                {
                    devicesList.Add(factory.CreatorConditioner(nameDevice));
                    break;
                }

                case "heater":
                {
                    devicesList.Add(factory.CreatorHeater(nameDevice));
                    break;
                }

                default:    //blower
                {
                    devicesList.Add(factory.CreatorBlower(nameDevice));
                    break;
                }
                }
                deviceDataView.Message      = null;
                deviceDataView.DeviceActive = devicesList.Count - 1;
                EventStateDevice();

                MapperDevices mapper   = new MapperDevices();
                DeviceDb      deviceDb = mapper.GetDeviceDb(devicesList.Last <IDevicable>());
                deviceDbContext.Devices.Add(deviceDb);
                deviceDbContext.SaveChanges();

                TempData["deviceData"] = deviceDataView;
                return(RedirectToAction("Index"));
            }
            else
            {
                deviceDataView.Message = "Устройство с таким именем уже имеется, введите другое имя.";
                return(View(deviceDataView));
            }
        }
        public ActionResult DeleteDevice(string parameter)// поменять на работу с id устройством............ (int? parameter)
        {
            List <DeviceDb> devicesDbList = deviceDbContext.Devices.ToList();
            DeviceDb        activDeviceDb = devicesDbList.Find(dev => dev.Name == parameter);

            if (activDeviceDb != null)
            {
                devicesDbList.Remove(activDeviceDb);
                deviceDbContext.Devices.Remove(activDeviceDb);
                deviceDbContext.SaveChanges();

                MapperDevices mapper = new MapperDevices();
                deviceDataView.DeviceList = mapper.GetAllDeviceModel(devicesDbList);
            }
            //
            if (deviceDataView.DeviceList.Count > 0)
            {
                deviceDataView.DeviceActive = 0;
            }
            else
            {
                deviceDataView.DeviceActive = null;
            }

            TempData["deviceData"] = deviceDataView;
            return(RedirectToAction("Index"));
        }
 private DeviceDb ChangeStateDevice(DeviceDb deviceDb, IDevicable device)
 {
     if (deviceDb is TVDb)
     {
         ((TVDb)deviceDb).Volume  = ((IVolumenable)device).Volume;
         ((TVDb)deviceDb).Channel = ((ISwitchable)device).Current;
     }
     if (deviceDb is SoundDeviceDb)
     {
         ((SoundDeviceDb)deviceDb).Volume  = ((IVolumenable)device).Volume;
         ((SoundDeviceDb)deviceDb).Channel = ((ISwitchable)device).Current;
     }
     if (deviceDb is HeaterDb)
     {
         ((HeaterDb)deviceDb).Temperature = ((ITemperaturable)device).Temperature;
     }
     if (deviceDb is ConditionerDb)
     {
         ((ConditionerDb)deviceDb).Temperature   = ((ITemperaturable)device).Temperature;
         ((ConditionerDb)deviceDb).LevelSpeedAir = ((ISpeedAirable)device).LevelSpeed;
     }
     if (deviceDb is BlowerDb)
     {
         ((BlowerDb)deviceDb).LevelSpeedAir = ((ISpeedAirable)device).LevelSpeed;
     }
     return(deviceDb);
 }
        public DeviceDb GetDeviceDb(IDevicable device)
        {
            DeviceDb deviceDb = null;

            if (device is IVolumenable && device is ISwitchable)
            {
                deviceDb = new TVDb {
                    Channel = ((ISwitchable)device).Current, Volume = ((IVolumenable)device).Volume
                };
            }
            else if (device is IVolumenable && device is ISwitchable && device is IBassable)
            {
                deviceDb = new SoundDeviceDb {
                    Channel = ((ISwitchable)device).Current, Volume = ((IVolumenable)device).Volume, Bass = ((IBassable)device).BassLevel
                };
            }
            else if (device is ITemperaturable && device is ISpeedAirable)
            {
                deviceDb = new ConditionerDb {
                    Temperature = ((ITemperaturable)device).Temperature, LevelSpeedAir = ((ISpeedAirable)device).LevelSpeed
                };
            }
            else if (device is ITemperaturable)
            {
                deviceDb = new HeaterDb {
                    Temperature = ((ITemperaturable)device).Temperature
                };
            }
            else if (device is ISpeedAirable)
            {
                deviceDb = new BlowerDb {
                    LevelSpeedAir = ((ISpeedAirable)device).LevelSpeed
                };
            }
            else
            {
            }
            deviceDb.Name  = device.Name;
            deviceDb.State = device.State;
            return(deviceDb);
        }
        public string Put(string id, [FromBody] string [] parameters)//textBox
        {
            string nameDevice   = parameters[0];
            string textBoxValue = null;

            if (parameters.Length == 2)
            {
                textBoxValue = parameters[1];
            }

            List <DeviceDb> devicesDbList = deviceDbContext.Devices.ToList();
            DeviceDb        deviceDb      = devicesDbList.Find(dev => dev.Name == nameDevice);
            IDevicable      device        = mapper.GetDeviceModel(deviceDb);

            string result;

            if (device.State == true)
            {
                switch (id)
                {
                case "onOff":
                {
                    device.Off();
                    result = device.State.ToString();
                    //deviceDb.State = device.State;
                    break;
                }

                case "volumeDown":
                {
                    ((IVolumenable)device).VolumeDown();
                    result = ((IVolumenable)device).Volume.ToString();
                    //deviceDb = ChangeStateDevice(deviceDb, device);
                    break;
                }

                case "volumeUp":
                {
                    ((IVolumenable)device).VolumeUp();
                    result = ((IVolumenable)device).Volume.ToString();
                    break;
                }

                case "volumeMute":
                {
                    ((IVolumenable)device).Volume = 0;
                    result = "0";
                    break;
                }

                case "volume":
                {
                    byte data;
                    byte.TryParse(textBoxValue, out data);
                    ((IVolumenable)device).Volume = data;
                    result = ((IVolumenable)device).Volume.ToString();
                    break;
                }

                case "chanelPrevios":
                {
                    ((ISwitchable)device).Previous();
                    result = ((ISwitchable)device).Current.ToString();
                    break;
                }

                case "chanelNext":
                {
                    ((ISwitchable)device).Next();
                    result = ((ISwitchable)device).Current.ToString();
                    break;
                }

                case "current":
                {
                    int data;
                    int.TryParse(textBoxValue, out data);
                    ((ISwitchable)device).Current = data;
                    result = ((ISwitchable)device).Current.ToString();
                    break;
                }

                case "tempDown":
                {
                    ((ITemperaturable)device).TemperatureDown();
                    result = ((ITemperaturable)device).Temperature.ToString();
                    break;
                }

                case "tempUp":
                {
                    ((ITemperaturable)device).TemperatureUp();
                    result = ((ITemperaturable)device).Temperature.ToString();
                    break;
                }

                case "temperature":
                {
                    byte data;
                    byte.TryParse(textBoxValue, out data);
                    ((ITemperaturable)device).Temperature = data;
                    result = ((ITemperaturable)device).Temperature.ToString();
                    break;
                }

                case "bassDown":
                {
                    ((IBassable)device).BassDown();
                    result = ((IBassable)device).BassLevel.ToString();
                    break;
                }

                case "bassUp":
                {
                    ((IBassable)device).BassUp();
                    result = ((IBassable)device).BassLevel.ToString();
                    break;
                }

                case "bass":
                {
                    byte data;
                    byte.TryParse(textBoxValue, out data);
                    ((IBassable)device).BassLevel = data;
                    result = ((IBassable)device).BassLevel.ToString();
                    break;
                }

                case "speedAirLow":
                {
                    ((ISpeedAirable)device).SpeedAirLow();
                    result = id;
                    break;
                }

                case "speedAirMedium":
                {
                    ((ISpeedAirable)device).SpeedAirMedium();
                    result = id;
                    break;
                }

                case "speedAirHight":
                {
                    ((ISpeedAirable)device).SpeedAirHight();
                    result = id;
                    break;
                }

                default:
                {
                    result = "неизвестная команда";
                    break;
                }
                }
            }
            else//false
            {
                switch (id)
                {
                case "onOff":
                {
                    device.On();
                    result = device.State.ToString();

                    break;
                }

                default:
                {
                    result = "deviceErrorStateFalse";
                    break;
                }
                }
            }

            deviceDb.State = device.State;
            deviceDb       = ChangeStateDevice(deviceDb, device);
            //int idDevice = deviceDb.Id;
            //deviceDb = mapper.GetDeviceDb(device);
            //deviceDb.Id = idDevice;

            deviceDbContext.Entry(deviceDb).State = System.Data.Entity.EntityState.Modified;
            deviceDbContext.SaveChanges();

            return(result);
        }
        public IDevicable GetDeviceModel(DeviceDb deviceDb)
        {
            IDevicable device = null;

            if (deviceDb is TVDb)
            {
                device = factory.CreatorTV(deviceDb.Name);
                ((ISwitchable)device).Current = ((TVDb)deviceDb).Channel;
                ((IVolumenable)device).Volume = ((TVDb)deviceDb).Volume;
            }
            else if (deviceDb is SoundDeviceDb)
            {
                device = factory.CreatorSound(deviceDb.Name);
                ((ISwitchable)device).Current = ((SoundDeviceDb)deviceDb).Channel;
                ((IVolumenable)device).Volume = ((SoundDeviceDb)deviceDb).Volume;
            }
            else if (deviceDb is ConditionerDb)
            {
                device = factory.CreatorConditioner(deviceDb.Name);
                ((ITemperaturable)device).Temperature = ((ConditionerDb)deviceDb).Temperature;

                if (((ConditionerDb)deviceDb).LevelSpeedAir == Speed.Low)
                {
                    ((ISpeedAirable)device).SpeedAirLow();
                }
                else if (((ConditionerDb)deviceDb).LevelSpeedAir == Speed.Medium)
                {
                    ((ISpeedAirable)device).SpeedAirMedium();
                }
                else
                {
                    ((ISpeedAirable)device).SpeedAirHight();
                }
            }
            else if (deviceDb is HeaterDb)
            {
                device = factory.CreatorHeater(deviceDb.Name);
                ((ITemperaturable)device).Temperature = ((HeaterDb)deviceDb).Temperature;
            }
            else if (deviceDb is BlowerDb)
            {
                device = factory.CreatorBlower(deviceDb.Name);
                if (((BlowerDb)deviceDb).LevelSpeedAir == Speed.Low)
                {
                    ((ISpeedAirable)device).SpeedAirLow();
                }
                else if (((BlowerDb)deviceDb).LevelSpeedAir == Speed.Medium)
                {
                    ((ISpeedAirable)device).SpeedAirMedium();
                }
                else
                {
                    ((ISpeedAirable)device).SpeedAirHight();
                }
            }
            else
            {
            }
            device.State = deviceDb.State;

            return(device);
        }