<?php
require_once "./Controller/Database.php";
require_once "./Controller/Setting.php";
require_once "./Controller/Recitven.php";

class Organizaciones extends BD {

    private $PARM;
    private $RECITVEN;
    function __construct() {
        $this->PARM = new Setting();
        $this->RECITVEN = new Recitven();
    }

    public function GET() {
        $this->Permission();
        $query = $this->consult("SELECT * FROM vorganizaciones");
        $query->execute();
        $result = $query->fetchAll(PDO::FETCH_ASSOC);
        $this->data = array(
            'result' => $result,
            'sectores' => $this->PARM->sectores(),
            'instituciones' => $this->RECITVEN->Instituciones(),
        );
        $this->httpHeaders = 200;
    }

    public function POST() {
        $this->Permission();
        $input = $this->input;
        $dat = array(
            ':recitven' => $input->recitven,
            ':sector' => $input->sector->id,
            ':nombre' => strtoupper($input->nombre),
            ':created_by' => $this->userid,
        ); 
        $query = $this->consult('INSERT INTO organizaciones (recitven,sector,nombre,created_by,created_at) 
            VALUES (:recitven,:sector,:nombre,:created_by,now()) returning id as id');
        if($query->execute($dat)){
			$organizacion = $query->fetchAll(PDO::FETCH_ASSOC)[0]['id'];
            $dat = array(
                ':organizacion' => $organizacion,
                ':cedula' => $input->responsable_cedula,
                ':nacionalidad' => $input->responsable_nacionalidad,
                ':created_by' => $this->userid,
            ); 
            $query = $this->consult('INSERT INTO responsables (organizacion,cedula,nacionalidad,created_by,created_at) 
            VALUES (:organizacion,:cedula,:nacionalidad,:created_by,now())');
            $query->execute($dat);
            $query = $this->consult("INSERT INTO responsables_legal (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $query = $this->consult("INSERT INTO gasto (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $query = $this->consult("INSERT INTO tic_internet (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $query = $this->consult("INSERT INTO tic_mantenimiento (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $query = $this->consult("INSERT INTO tic_remoto (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $query = $this->consult("INSERT INTO tic_seguridad (organizacion) VALUES (?)");
            $query->execute([$organizacion]);
            $this->httpHeaders = 200;
            $this->CreateUser($input->responsable_cedula,$this->userid,$input->usuario);
        } 
    }

    public function PUT() {
        $this->Permission();
        $input = $this->input;
        $dat = array(
            ':sector' => $input->sector->id,
            ':edited_by' => $this->userid,
            ':id' => $this->id,
        ); 
        $query = $this->consult('UPDATE organizaciones SET sector=:sector,nombre=:nombre,
            edited_by=:edited_by, updated_at=now() WHERE id=:id');
        if($query->execute($dat)){
            $dat = array(
                ':organizacion' => $this->id,
                ':cedula' => $input->responsable_cedula,
                ':nacionalidad' => $input->responsable_nacionalidad,
                ':edited_by' => $this->userid,
            ); 
            $query = $this->consult('UPDATE responsables SET cedula=:cedula, nacionalidad=:nacionalidad,
                edited_by=:edited_by, updated_at=now() WHERE organizacion=:organizacion');
            $query->execute($dat);
            $this->httpHeaders = 200;
            $this->CreateUser($input->responsable_cedula,$this->userid,$input->usuario);
        }
    }

    public function DEL() {
        $this->Permission();
        $query = $this->consult("DELETE FROM responsables_legal WHERE organizacion=?");
        $query->execute([$this->input->id]);
        $query = $this->consult("DELETE FROM responsables WHERE organizacion=?");
        $query->execute([$this->input->id]);
        $query = $this->consult("DELETE FROM gasto WHERE organizacion=?");
        $query->execute([$this->input->id]);
        $query = $this->consult("DELETE FROM organizaciones WHERE id=?");
        $query->execute([$this->input->id]);
        $query = $this->consult('UPDATE auth.users SET usuario=NULL WHERE usuario=?');
        $query->execute([$this->input->usuario]);
        $this->httpHeaders = 200; 
    }

    public function Cedula() {
        $this->Permission();
        $input = $this->input;
        $result = $this->RECITVEN->Cedula($input->nacionalidad,$input->cedula);
        if($result['status']){
            $this->data = $result;
            $this->httpHeaders = 200;
        } else {
            $this->httpHeaders = 204;
        }  
    }

    private function CreateUser($cedula,$userid,$usuario) {
        $query = $this->consult("SELECT * FROM auth.users WHERE usuario=?");
        $query->execute([$usuario]);
        $result = $query->fetchAll(PDO::FETCH_ASSOC);
        $query = $this->consult("SELECT * FROM personal WHERE cedula=?");
        $query->execute([$cedula]);
        $respon = $query->fetchAll(PDO::FETCH_ASSOC)[0];
        if(!$result){
            $dat = array(
                ':usuario' => $usuario,
                ':name' => $respon['nombres'],
                ':lastname' => $respon['apellidos'],
                ':email' => $respon['email'],
                ':activo' => 1,
                ':cedula' => $cedula,
            ); 
            $query = $this->consult('INSERT INTO auth.users (usuario, name, lastname, email, activo, cedula) 
            VALUES (:usuario, :name, :lastname, :email, :activo, :cedula) returning id as id');
            $query->execute($dat);
            $result = $query->fetchAll(PDO::FETCH_ASSOC);
            $id = $result[0]['id'];
        } else {
            $dat = array(
                ':usuario' => $usuario,
                ':name' => $respon['nombres'],
                ':lastname' => $respon['apellidos'],
                ':email' => $respon['email'],
                ':cedula' => $cedula,
            ); 
            $query = $this->consult('UPDATE  auth.users SET name=:name, lastname=:lastname, email=:email, cedula=:cedula
                WHERE usuario=:usuario');
            $id = $result[0]['id'];
        }
        $query = $this->consult("SELECT * FROM auth.role_user WHERE activo AND role=2 AND userid=?");
        $query->execute([$id]);
        $result = $query->fetchAll(PDO::FETCH_ASSOC);
        if(!$result) {
            $query = $this->consult('INSERT INTO auth.role_user ("userid","role","activo",created_by,created_at) 
            VALUES (?,?,?,?,now())');
            $query->execute([$id,2,1,$userid]);     
        }
    }

}