//
        // GET: /SalasReservadas/
        // http://localhost:2244/sym/services/api/SalasReservadas?quantidadePessoas=5&codigoUnidade=1&intervaloData=1&possuiProjetor=
        public SalasAgendadas Get(int quantidadePessoas, int codigoUnidade, IntervaloPesquisaSalasEnum intervaloData, bool? possuiProjetor)
        {
            DateTime dataInicio, dataFim;

            switch (intervaloData)
            {
                case IntervaloPesquisaSalasEnum.Hoje:
                    dataInicio = DateTimeExtensions.BrasilToday();
                    dataFim = DateTimeExtensions.BrasilToday().AddWorkingDays(1).AddMinutes(-1); ;
                    break;
                case IntervaloPesquisaSalasEnum.ProximosSeteDias:
                    dataInicio = DateTimeExtensions.BrasilToday();
                    dataFim = DateTimeExtensions.BrasilToday().AddWorkingDays(7).AddMinutes(-1);
                    break;
                case IntervaloPesquisaSalasEnum.ProximosTrintaDias:
                    dataInicio = DateTimeExtensions.BrasilToday();
                    dataFim = DateTimeExtensions.BrasilToday().AddWorkingDays(15).AddMinutes(-1);
                    break;
                default:
                    dataInicio = DateTime.MinValue;
                    dataFim = DateTime.MaxValue;
                    break;
            }


            List<SalaReuniao> listaSalas = new SalaReuniaoBS().ListarSalas(codigoUnidade, quantidadePessoas, possuiProjetor);
            List<ReservaSala> listaReservas = new ReservarSalaBS().ListarReservasPorData(dataInicio, dataFim, codigoUnidade);

            SalasAgendadas pesquisaAgendamento = new SalasAgendadas();

            pesquisaAgendamento.meses = new List<Meses>();

            bool chegouFim = false;

            DateTime dataAtual = dataInicio;
            Meses mesAtual = new Meses();

            while (!chegouFim)
            {
                Dias dia = new Dias();
                dia.diaSemana = dataAtual.DayName();
                dia.numeroDia = dataAtual.Day;
                dia.salas = new List<Salas>();

                if (dataAtual.IsWorkingDay())
                {
                    if (pesquisaAgendamento.meses.Where(w => w.ano == dataAtual.Year).Count() == 0)
                    {
                        mesAtual = new Meses();
                        mesAtual.ano = dataAtual.Year;
                        mesAtual.numeroMes = dataAtual.Month;
                        mesAtual.mes = dataAtual.MonthName();
                        mesAtual.descricaoMes = string.Format("{0} {1}", mesAtual.mes, DateTime.UtcNow.Year);
                        mesAtual.dias = new List<Dias>();

                        pesquisaAgendamento.meses.Add(mesAtual);
                    }

                    foreach (SalaReuniao salaAtual in listaSalas)
                    {
                        Salas sala = new Salas();

                        sala.codigoUnidade = salaAtual.CodigoUnidade;
                        sala.nomeUnidade = new UnidadeBS().DetalharUnidade(salaAtual.CodigoUnidade).NomeUnidade;
                        sala.codigoSala = salaAtual.CodigoSalaReuniao;
                        sala.nomeSala = salaAtual.NomeSala;
                        sala.quantidadeLugares = salaAtual.CapacidadeSala;
                        sala.horarioInicial = salaAtual.DisponibilidadeInicio;
                        sala.horarioFinal = salaAtual.DispoonibilidadeFim;

                        sala.reservas = new List<Reservas>();

                        foreach (ReservaSala reservaBase in listaReservas.Where(p => p.CodigoSalaReuniao == salaAtual.CodigoSalaReuniao
                                                                                  && p.DataHoraInicial.ToShortDateString() == dataAtual.ToShortDateString()))
                        {
                            Reservas reserva = new Reservas();
                            reserva.horarioFinal = reservaBase.DataHoraFinal;
                            reserva.horarioInicial = reservaBase.DataHoraInicial;
                            reserva.idAgendamento = reservaBase.CodigoReserva;
                            reserva.expirouLimiteOcupacao = reservaBase.ExpirouLimiteOcupacao;
                            reserva.reservadoPara = "";

                            sala.reservas.Add(reserva);
                        }

                        dia.salas.Add(sala);
                    }

                    dia = this.TratarHorarioComercialHoje(dataAtual, dia);

                    if (dia != null)
                        mesAtual.dias.Add(dia);
                }

                dataAtual = dataAtual.AddDays(1);

                if (dataAtual > dataFim)
                {
                    chegouFim = true;
                }
            }

            return pesquisaAgendamento;
        }
        private Dias TratarHorarioComercialHoje(DateTime dataAtual, Dias dia)
        {
            if (dataAtual.ToShortDateString() == DateTimeExtensions.BrasilNow().ToShortDateString())
            {
                if (DateTimeExtensions.BrasilNow().Hour > 18)
                {
                    return null;
                }

                if (DateTimeExtensions.BrasilNow().Hour > 8)
                {
                    DateTime horarioInicial = new DateTime(1900, 01, 01, 0, 0, 0, DateTimeKind.Utc);

                    if (DateTimeExtensions.BrasilNow().Minute < 30)
                    {
                        horarioInicial = horarioInicial.AddHours(DateTimeExtensions.BrasilNow().Hour);
                        //horarioInicial = horarioInicial.AddMinutes(30);
                    }
                    else
                    {
                        horarioInicial = horarioInicial.AddHours(DateTimeExtensions.BrasilNow().Hour);
                        horarioInicial = horarioInicial.AddMinutes(30);
                    }

                    foreach (var item in dia.salas)
                    {
                        item.horarioInicial = horarioInicial;
                    }
                }
            }

            return dia;

        }