// GET: AtencionHorarios/Details/5
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AtencionHorario atencionHorario = await db.AtencionHorarios.FindAsync(id);

            if (atencionHorario == null)
            {
                return(HttpNotFound());
            }
            return(View(atencionHorario));
        }
        // GET: AtencionHorarios/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AtencionHorario atencionHorario = await db.AtencionHorarios.FindAsync(id);

            if (atencionHorario == null)
            {
                return(HttpNotFound());
            }
            ViewBag.ConsultorioId = new SelectList(db.Consultorios, "Id", "Nombre", atencionHorario.ConsultorioId);
            ViewBag.MedicoId      = new SelectList(db.Medicos, "Id", "Nombre", atencionHorario.MedicoId);
            return(View(atencionHorario));
        }
        public async Task <ActionResult> Create([Bind(Include = "Id,ConsultorioId,MedicoId,Dia,HoraInicio,HoraFin")] AtencionHorario atencionHorario)
        {
            var todosHorarios = db.AtencionHorarios
                                .Join(db.Consultorios, a => a.ConsultorioId, c => c.Id,
                                      (a, c) => new { a.MedicoId, a.ConsultorioId, a.Dia, horaInicio = a.HoraInicio, horaFin = a.HoraFin })
                                .Join(db.Medicos, a => a.MedicoId, m => m.Id,
                                      (a, m) => new { a.MedicoId, a.ConsultorioId, a.Dia, HoraInicio = a.horaInicio, HoraFin = a.horaFin })
                                .Where(a => a.Dia == atencionHorario.Dia && a.MedicoId == atencionHorario.MedicoId &&
                                       a.HoraInicio.Hour <atencionHorario.HoraFin.Hour && a.HoraFin.Hour >= atencionHorario.HoraFin.Hour ||
                                                          a.Dia == atencionHorario.Dia && a.MedicoId == atencionHorario.MedicoId &&
                                                          a.HoraInicio.Hour <= atencionHorario.HoraInicio.Hour && a.HoraFin.Hour> atencionHorario.HoraInicio.Hour ||
                                       a.Dia == atencionHorario.Dia && a.ConsultorioId == atencionHorario.ConsultorioId &&
                                       a.HoraInicio.Hour <atencionHorario.HoraFin.Hour && a.HoraFin.Hour >= atencionHorario.HoraFin.Hour ||
                                                          a.Dia == atencionHorario.Dia && a.ConsultorioId == atencionHorario.ConsultorioId &&
                                                          a.HoraInicio.Hour <= atencionHorario.HoraInicio.Hour && a.HoraFin.Hour> atencionHorario.HoraInicio.Hour).ToList();

            if (ModelState.IsValid)
            {
                if (todosHorarios.Count == 0)
                {
                    db.AtencionHorarios.Add(atencionHorario);
                    await db.SaveChangesAsync();

                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "Registrado agregado a la base de datos.",
                        MessageType = GenericMessages.success
                    };
                    return(RedirectToAction("Index"));
                }
                else
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "El medico o el consultorio se encuentra ocupado",
                        MessageType = GenericMessages.danger
                    };
                    return(RedirectToAction("Create"));
                }
            }

            ViewBag.ConsultorioId = new SelectList(db.Consultorios, "Id", "Nombre", atencionHorario.ConsultorioId);
            ViewBag.MedicoId      = new SelectList(db.Medicos, "Id", "Nombre", atencionHorario.MedicoId);
            return(View(atencionHorario));
        }
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            try
            {
                AtencionHorario consultorioAsociado = await db.AtencionHorarios.FirstOrDefaultAsync(t => t.ConsultorioId == id);

                if (consultorioAsociado != null)
                {
                    TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                    {
                        Message     = "No se puede eliminar consultorio, está asignado a un Médico.",
                        MessageType = GenericMessages.warning
                    };
                    return(RedirectToAction("Index"));
                }

                Consultorio consultorio = await db.Consultorios.FindAsync(id);

                //db.Consultorios.Remove(consultorio);
                consultorio.BaseEstado = Shared.BaseEstado.ELIMINADO;
                await db.SaveChangesAsync();

                TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                {
                    Message     = "Consultorio eliminado exitosamente.",
                    MessageType = GenericMessages.success
                };
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                var err = $"Error al eliminar consultorio: {ex.Message}";
                TempData[Application.MessageViewBagName] = new GenericMessageViewModel
                {
                    Message     = err,
                    MessageType = GenericMessages.danger
                };
                return(RedirectToAction("Index"));
            }
        }