// asignatura.cpp - Definición de la clase CAsignatura
#include <iostream>
#include "asignatura.h"

CAsignatura::CAsignatura(int id, string nom):ID(id), nombre(nom)
{
  asignarID(id);            // para controlar errores
  fecha.asignarFecha();     // fecha actual por omisión
  convocatorias.reserve(6); // reservar espacio para 6 elementos
}

void CAsignatura::asignarID(int id)
{
  if (id < 1)
  {
    cerr << "error: Id no válido\n";
    id = 999999;
  }
  ID = id;
}

int CAsignatura::obtenerID()
{
  return ID;
}

void CAsignatura::asignarNombre(string nom)
{
  nombre = nom;
}

string CAsignatura::obtenerNombre()
{
  return nombre;
}

bool CAsignatura::asignarFecha(CFecha& f)
{
  bool b = f.fechaCorrecta();
  if (b) fecha = f;
  return b;
}

const CFecha& CAsignatura::obtenerFecha()
{
  return fecha;
}

CConvocatoria& CAsignatura::obtenerConvocatoria(unsigned int i)
{
  static CConvocatoria c;
  size_t n = convocatoriasConsumidas();
  if ( n == 0 ) return c;
  --i; // ajustar la convocatoria (1, 2, ...)
       // a los subíndices (0, 1, ...) del vector
  if (i >= 0 && i < n)
    return convocatorias[i];
  else
  {
    cerr << "error: convocatorias consumidas " << n << endl;
    return c;
  }
}

void CAsignatura::anyadirConvocatoria(CConvocatoria& c)
{
  convocatorias.push_back(c);
}

size_t CAsignatura::convocatoriasConsumidas()
{
  return convocatorias.size();
}

CAsignatura& CAsignatura::operator<<(CConvocatoria& conv)
{
  convocatorias.push_back(conv);
  return *this;
}

CAsignatura::operator bool()
{
  // Si la asignatura referenciada por this
  // está aprobada devuelve true y si no false
  int nconv = convocatoriasConsumidas();
  if (nconv > 0 && obtenerConvocatoria(nconv).obtenerNota() >= 5)
    return true;
  return false;
}

