<?php
require_once 'Fechas.php';

class Evento {
    public $evento_id, $periodo_id, $insignia_id, $titulo, $detalle, $shortname, $dia, $fecha, $hora_ini, $hora_fin, $inscripciones, $periodicidad;
    public $fechasArr;
    function __construct($evento_id, $periodo_id, $insignia_id, $titulo, $detalle, $shortname, $fecha, $hora_ini, $hora_fin, $inscripciones){
        $this->evento_id = $evento_id;
        $this->periodo_id = $periodo_id;
        $this->insignia_id = $insignia_id;
        $this->titulo = $titulo;
        $this->detalle = $detalle;
        $this->shortname = $shortname;
        $this->fecha = Fechas::validaFormatoFecha($fecha);
        $this->hora_ini = $hora_ini;
        $this->hora_fin = $hora_fin;        
        $this->inscripciones = $inscripciones;
        $this->fechasArr = array();
    }
    
    //Fecha normal
    function addFecha($fecha){
        $fecha = Fechas::validaFormatoFecha($fecha);
        if(strtotime($fecha)>= strtotime($this->fecha))//solo si la fecha es mayor a la fecha inicial
            $this->fechasArr[] = array('fecha_orig' => $fecha, 'fecha' => $fecha, 'hora_ini' => $this->hora_ini, 'hora_fin' => $this->hora_fin);
    }
    
    //Fechas modificadas
    function replaceFecha($fecha_orig, $fecha_new, $hora_ini, $hora_fin){//fecha_orig en formato yyyy-mm-dd hh:mm:ss
        $fecha_busca = explode(" ", $fecha_orig);//quita horas
        $fecha_busca[0] = Fechas::validaFormatoFecha($fecha_busca[0]);
        $fecha_new = Fechas::validaFormatoFecha($fecha_new);
        
        for($i=0; $i< count($this->fechasArr); $i++){
            if($this->fechasArr[$i]['fecha_orig'] == $fecha_busca[0]){
                $this->fechasArr[$i]['fecha'] = $fecha_new;
                $this->fechasArr[$i]['hora_ini'] = $hora_ini;
                $this->fechasArr[$i]['hora_fin'] = $hora_fin;
                break;//solo 1 por fecha
            }
        }
    }
    
    //Excepciones
    function removeFecha($fecha_busca){
        $tmp = explode(' ', $fecha_busca);//quita horas
        $fecha_busca = Fechas::validaFormatoFecha($tmp[0]);
        for($i=0; $i< count($this->fechasArr); $i++){
            if($this->fechasArr[$i]['fecha_orig'] == $fecha_busca){
                array_splice($this->fechasArr, $i, 1);
                break;
            }
        }
    }
    
    function hasFecha($fecha){
        $fecha = Fechas::validaFormatoFecha($fecha);
        foreach($this->fechasArr as $fechaArr){
            if($fechaArr['fecha'] == $fecha)
                return true;
        }
        return false;
    }
    
    //Obtiene listado de fechas y cada una con la descripicón del evento.
    //Filtra las fechas generadas por el mes y el año
    function getEventList($mes, $anho){
        $arr = array(
            'evento_id' => $this->evento_id,
            'titulo' => $this->titulo,
            'detalle' => $this->detalle,
            'periodo_id' => $this->periodo_id,
            'shortname' => $this->shortname,
            'dia' => $this->dia,
            'inscripciones' => $this->inscripciones,
            'insignia_id' => $this->insignia_id,
            'periodicidad' => $this->periodicidad,
            'fechas' => array()
        );
        $key_values = array_column($this->fechasArr, 'fecha'); 
        array_multisort($key_values, SORT_ASC, $this->fechasArr);
        foreach($this->fechasArr as $fecha){
            //if(intval(date("n", strtotime($fecha["fecha"]))) ==  intval($mes) && intval(date("Y", strtotime($fecha["fecha"]))) == intval($anho) ){
                array_push($arr['fechas'], array('fecha_orig' => $fecha['fecha_orig'],'fecha' => $fecha['fecha'], 'dia' => intval(date("j", strtotime($fecha['fecha']))),
                    'hora_ini_orig' => substr($fecha['hora_ini'],0,5), 'hora_ini' => substr($fecha['hora_ini'],0,5),'hora_fin' => substr($fecha['hora_fin'],0,5)));
            //}
        }
        return $arr;
    }
}