<?php

namespace App\Exports\Examen\Admision;

use Illuminate\Support\Facades\DB;

use App\RFAspirante;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;

class ResultadosExport implements FromQuery, WithTitle,WithHeadings,ShouldAutoSize
{
    private $data;
    private $nom_pag;

    public function __construct( $data, $nom_pag)
    {
        $this->data  = $data;
        $this->nom_pag  = $nom_pag;
    }

    /**
     * @return Builder
     */
    public function query()
    {        
        $data = $this->data;
        $tipo = $this->nom_pag;
        
        //filtro_carrera    
        //filtro_carrera_nombre
        //filtro_periodo
        //filtro_folio
        $aspirantes = DB::connection('escolar')->table('view_resultados_examen_admision as v');

        if (($data['filtro_carrera']!=null) && $data['filtro_carrera']==$data['carrera']) {
            $aspirantes = $aspirantes->where('idCarrera', $data['carrera']);
        } else {
            if ($data['filtro_carrera']==null){
                $aspirantes = $aspirantes->where('idCarrera', $data['carrera']);
            } else {
                //esto es para q solo devuelva los q coinciden con la carrera del filtro
                $aspirantes = $aspirantes->where('idCarrera', '1000');
            }
        }

        if ($data['filtro_periodo']!=null) {
            $aspirantes = $aspirantes->where('idPeriodo', $data['filtro_periodo']);
        } else {
            $aspirantes = $aspirantes->where('idPeriodo', '>=', '9');
        }

        if ($data['filtro_folio']!=null) {
            $aspirantes = $aspirantes->where('id', $data['filtro_folio']);   
        }   

        if ($data['filtro_nombre']!=null) {
            $aspirantes = $aspirantes->where(function($query) use ($data) {
                $query = $query->orWhere('nombre', 'like', '%'.$data['filtro_nombre'].'%');
                $query = $query->orWhere('ap_paterno', 'like', '%'.$data['filtro_nombre'].'%');
                $query = $query->orWhere('ap_materno', 'like', '%'.$data['filtro_nombre'].'%');
            });
        }

        if ($data['filtro_inicio']!=null) {
            if ($data['filtro_fin']!=null) {
                //buscar dentro del rango de fecha
                $aspirantes = $aspirantes->whereBetween('acceso_exa', $data['filtro_inicio'], $data['filtro_fin'] );
            } else {
                //buscar solo de ese dia
                $aspirantes = $aspirantes->whereDate('acceso_exa', $data['filtro_inicio'] );
            }
        }

        if (array_key_exists('filtro_especial', $data)) {
            switch ($data['filtro_especial']) {
                case 'aceptados':
                    $aspirantes = $aspirantes->where('resultado', '1' );
                    break; 

                case 'no_aceptados':
                    $aspirantes = $aspirantes->where('resultado', '0' );
                    break; 

                case 'no_acceso':
                    $aspirantes = $aspirantes->whereNull('acceso_exa');
                    break;
            }
        }

        $aspirantes = $aspirantes->orderBy('id')
            ->select('v.id','v.nombre','v.ap_paterno','v.ap_materno','v.sexo','v.correo','v.curp', 'v.nombre_carrera', 'v.aciertos', 'v.respuestas', 'v.inicio_exa', 'v.acceso_exa', 'v.resultado_texto');

        return $aspirantes;
    }

    public function headings(): array
    {
        return [
            'Folio',
            'Nombre',
            'Apellido Paterno',
            'Apellido Materno',
            'Sexo',
            'Correo',
            'CURP',
            'Carrera',
            'Aciertos',
            'Preguntas contestadas',
            'Fecha de aplicación',
            'Acceso Examen',
            'Estado'
        ];
    }

    /**
     * @return string
     */
    public function title(): string
    {
        return $this->nom_pag;
    }
}