public bool AdicionarDisciplina(Disciplina disciplina)
        {
            if (disciplina == null)
                return false;

            if (!disciplina.Turmas.Any())
            {
                qtdCreditos += disciplina.Creditos;
                especiais.Add(disciplina);
                return false;
            }

            var periodosDisponiveis = true;
            var adicionouPeriodo = false;
            foreach (var turma in disciplina.Turmas)
            {
                foreach (var periodo in turma.Periodos)
                {
                    if (grade[(int)periodo.DiaSemana - 2, (int)periodo.Horario - 1] != null)
                    {
                        periodosDisponiveis = false;
                    }
                }

                if (!periodosDisponiveis)
                {
                    periodosDisponiveis = true;
                    continue;
                }

                foreach (var periodo in turma.Periodos)
                {
                    adicionouPeriodo = true;
                    grade[(int)periodo.DiaSemana - 2, (int)periodo.Horario - 1] = new Celula()
                    {
                        Bloqueado = false,
                        CodCred = disciplina.CodCred,
                        Turma = turma.Numero
                    };

                    disciplina.TurmaSelecionada = turma;
                }

                break;
            }

            if (!adicionouPeriodo)
            {
                return false;
            }

            qtdCreditos += disciplina.Creditos;
            normais.Add(disciplina);

            return true;
        }
        public List<Disciplina> CarregaDisciplinasPendentes(out int creditosCursados)
        {
            var disciplinasPendentes = new List<Disciplina>();
            creditosCursados = 0;

            var reader = new StreamReader(_filePath);

            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();

                if (line.StartsWith("#"))
                {
                    continue;
                }

                if (line.StartsWith("C"))
                {
                    var disc = line.Split(';');
                    var ind = disc[1].Split('-');
                    creditosCursados += int.Parse(ind[1]);
                    continue;
                }

                var columns = line.Split(';');

                var disciplina = new Disciplina();
                disciplina.Nivel = int.Parse(columns[0]);
                var cod = columns[1].Split('-');
                disciplina.CodCred = cod[0];
                disciplina.Creditos = int.Parse(cod[1]);
                disciplina.Nome = columns[2];
                disciplina.CargaHoraria = int.Parse(columns[3]);

                if (!string.IsNullOrEmpty(columns[4]))
                {
                    var dependencias = columns[4].Split(',');
                    for (int i = 0; i < dependencias.Length; i++)
                    {
                        if (dependencias[i].StartsWith("CRED"))
                        {
                            disciplina.MinimoCreditosCursados = int.Parse(dependencias[i].Remove(0, 4));
                        }

                        var discRequisito = disciplinasPendentes.FirstOrDefault(o => o.CodCred == dependencias[i]);
                        if (discRequisito != null)
                        {
                            disciplina.Prerequisitos.Add(discRequisito);
                        }
                    }
                }

                if (!string.IsNullOrEmpty(columns[5]))
                {
                    var turmas = columns[5].Split(',');

                    for (int i = 0; i < turmas.Length; i++)
                    {
                        var t = turmas[i].Split('-');
                        var turma = new Turma();
                        turma.Numero = int.Parse(t[0]);
                        turma.Periodos = Periodo.IdentificaPeriodos(t[1]);

                        disciplina.Turmas.Add(turma);
                    }
                }

                if (!disciplina.Turmas.Any())
                {
                    disciplina.Especial = true;
                }

                disciplinasPendentes.Add(disciplina);
            }

            return disciplinasPendentes;
        }