<?php
require_once "Database.php";
require_once "./inc/config_recitven.php";

class Recitven extends BD {

    private $realm	=	REALM;
    private $issuer	=	ISSUER;
    private $client_id	=	CLIENT_ID;
    private $client_secret	=	CLIENT_SECRET;
    private $username	=	USERNAME;
    private $password	=	PASSW;
    private $url_reveca	=	URL;
    private $url_personal	=	URL2;
    private $api	=	API;

	public function Cedula($nacionalidad,$cedula) {
        $token =  $this->Token();
        if($token){
            $info = $this->Info($token,$nacionalidad,$cedula);
            if(count($info)>0){
                $this->Register($nacionalidad,$cedula,$info[0]);
                return array( 
                    'status' => true,
                    'info' => $info[0] 
                ); 
            } else {
                return array( 'status' => false ); 
            }
        } else {
            return array( 'status' => false ); 
        }
	}


    private function Token() {
        $curl = curl_init();
        curl_setopt_array($curl, array(
          CURLOPT_URL => $this->issuer.'/realms/'.$this->realm.'/protocol/openid-connect/token',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => '',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS => 'client_id='.$this->client_id.'&username='.$this->username.'&password='.$this->password.'&grant_type=password&client_secret='.$this->client_secret,
          CURLOPT_HTTPHEADER => array(
            'Content-Type: application/x-www-form-urlencoded'
          ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $result = json_decode($response, TRUE);
        if(isset($result['access_token'])){
            return $result['access_token'];
        } else {
            return null;
        }
    }

    private function Info($token,$nacionalidad,$cedula) {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $this->url_reveca,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => 'prefijo_documento_identidad='.$nacionalidad.'&documento_identidad='.$cedula,
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/x-www-form-urlencoded',
                'Authorization: '.$token,
                'Accept: */*'
            ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $result = json_decode($response, TRUE);
        return $result;
    }

    private function Register($nacionalidad,$cedula,$info) {
        $query = $this->consult("SELECT * FROM personal WHERE cedula=?");
        $query->execute([$cedula]);
        $result = $query->fetchAll(PDO::FETCH_ASSOC);
        if(!$result){
            $dat = array(
                ':cedula' => $cedula,
                ':nacionalidad' => $nacionalidad,
                ':nombres' => $info['nombres'],
                ':apellidos' => $info['apellidos'],
                ':email' => $info['email'],
                ':sexo' => $info['sexo'],
                ':id_estado_residencia' => $info['id_estado_residencia'],
                ':id_municipio_residencia' => $info['id_municipio_residencia'],
                ':id_parroquia_residencia' => $info['id_parroquia_residencia'],
                ':edad' => $info['edad'],
                ':estatus_registro' => $info['estatus_registro'],
                ':id_nivel_estudio' => $info['id_nivel_estudio'],
                ':id_profesion' => $info['id_profesion'],
                ':id_area' => $info['id_area'],
                ':id_tipo_institucion_laboral' => $info['id_tipo_institucion_laboral'],
                ':id_institucion' => $info['id_institucion'],
                ':talento_humano_dedicado' => $info['talento_humano_dedicado'],
                ':telefono' => $info['telefono'],
                ':telefono_cel' => $info['telefono_cel']
            ); 
            $query = $this->consult('INSERT INTO personal 
                (cedula, nacionalidad, nombres, apellidos, email, sexo, id_estado_residencia, id_municipio_residencia,
                id_parroquia_residencia, edad, estatus_registro, id_nivel_estudio, id_profesion, id_area, 
                id_tipo_institucion_laboral, id_institucion, talento_humano_dedicado,telefono,telefono_cel) 
                VALUES (:cedula, :nacionalidad, :nombres, :apellidos, :email, :sexo, :id_estado_residencia, :id_municipio_residencia,
                :id_parroquia_residencia, :edad, :estatus_registro, :id_nivel_estudio, :id_profesion, :id_area, 
                :id_tipo_institucion_laboral, :id_institucion, :talento_humano_dedicado,:telefono,:telefono_cel)');
            $query->execute($dat);
        }
    }

    public function AccessToken($username,$password) {
        $curl = curl_init();
        curl_setopt_array($curl, array(
          CURLOPT_URL => $this->issuer.'/realms/'.$this->realm.'/protocol/openid-connect/token',
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_ENCODING => '',
          CURLOPT_MAXREDIRS => 10,
          CURLOPT_TIMEOUT => 0,
          CURLOPT_FOLLOWLOCATION => true,
          CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
          CURLOPT_CUSTOMREQUEST => 'POST',
          CURLOPT_POSTFIELDS => 'client_id='.$this->client_id.'&username='.$username.'&password='.$password.'&grant_type=password&client_secret='.$this->client_secret,
          CURLOPT_HTTPHEADER => array(
            'Content-Type: application/x-www-form-urlencoded'
          ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $result = json_decode($response, TRUE);
        if(isset($result['access_token'])){
            return $result['access_token'];
        } else {
            return null;
        }
    }

    public function Instituciones() {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $this->api.'/instituciones',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/x-www-form-urlencoded',
                'Accept: */*'
            ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $result = json_decode($response, TRUE);
        return $result;
    }

    public function PerosnalInstitucione($token,$organizacion) {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $this->url_personal,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS =>'{"institucion":'.$organizacion.'}',
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/json',
                'Authorization: '.$token,
                'Accept: */*'
            ),
        ));
        $response = curl_exec($curl);
        curl_close($curl);
        $result = json_decode($response, TRUE);
        return $result;
    }

    public function Personal($organizacion) {
        $token =  $this->Token();
        $personal = $this->PerosnalInstitucione($token,$organizacion);
        for ($i=0; $i < count($personal); $i++) { 
            $query = $this->consult("SELECT * FROM personal WHERE cedula=?");
            $query->execute([$personal[$i]['cedula']]);
            $result = $query->fetchAll(PDO::FETCH_ASSOC);
            if(!$result){    
                $dat = array(
                    ':nombres' =>$personal[$i]['nombres'],
                    ':apellidos' =>$personal[$i]['apellidos'],
                    ':email' =>$personal[$i]['email'],
                    ':nacionalidad' => $personal[$i]['letra_documento'],
                    ':cedula' => $personal[$i]['cedula'],
                    ':sexo' =>$personal[$i]['sexo'],
                    ':id_estado_residencia' =>$personal[$i]['id_estado_residencia'],
                    ':id_municipio_residencia' =>$personal[$i]['id_municipio_residencia'],
                    ':id_parroquia_residencia' =>$personal[$i]['id_parroquia_residencia'],
                    ':edad' =>$personal[$i]['edad'],
                    ':estatus_registro' =>$personal[$i]['estatus_registro'],
                    ':id_nivel_estudio' =>$personal[$i]['id_nivel_estudio'],
                    ':id_profesion' =>$personal[$i]['id_profesion'],
                    ':id_area' =>$personal[$i]['id_area'],
                    ':id_tipo_institucion_laboral' =>$personal[$i]['id_tipo_institucion_laboral'],
                    ':id_institucion' =>$personal[$i]['id_institucion'],
                    ':talento_humano_dedicado' =>$personal[$i]['talento_humano_dedicado'],
                    ':telefono' =>$personal[$i]['telefono'],
                    ':telefono_cel' =>$personal[$i]['telefono_cel']
                ); 
                $query = $this->consult('INSERT INTO personal 
                    (cedula, nacionalidad, nombres, apellidos, email, sexo, id_estado_residencia, id_municipio_residencia,
                    id_parroquia_residencia, edad, estatus_registro, id_nivel_estudio, id_profesion, id_area, 
                    id_tipo_institucion_laboral, id_institucion, talento_humano_dedicado,telefono,telefono_cel) 
                    VALUES (:cedula, :nacionalidad, :nombres, :apellidos, :email, :sexo, :id_estado_residencia, :id_municipio_residencia,
                    :id_parroquia_residencia, :edad, :estatus_registro, :id_nivel_estudio, :id_profesion, :id_area, 
                    :id_tipo_institucion_laboral, :id_institucion, :talento_humano_dedicado,:telefono,:telefono_cel)');
                $query->execute($dat);
            }
        }
        return count($personal);
	}


}