<?php

namespace App\Models;

use Yajra\Oci8\Eloquent\OracleEloquent as Eloquent;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class ServiceEmpleado extends Eloquent
{
    use HasFactory;
    
    protected $table = null; // No hay tabla real
    public $incrementing = false;
    public $timestamps = false;

    public static function find($login)
    {
        // Primero buscar en Oracle
        $nombre_usuario = strtoupper($login);
        $oracle = ServiceEmpleadoORACLE::where('login',$nombre_usuario)->first();

        // También en Postgres
        $rrhh   = ServiceEmpleadoRRHH::where('login',$nombre_usuario)->first();

        if (!$oracle && !$rrhh) {
            return null;
        }

        // Retornar objeto combinado, priorizando lo que quieras
        $empleado = new static();

        $empleado->ci         = $rrhh ? $rrhh->ci : ($oracle ? $oracle->ci : null);
        $empleado->nombre     = $rrhh ? ($rrhh->a_paterno.' '.$rrhh->a_materno.' '.$rrhh->nombre) :($oracle ? $oracle->nombre : null);
        $empleado->cargo      = $rrhh ? $rrhh->cargo : ($oracle ? $oracle->cargo : null);
        $empleado->area       = $rrhh ? $rrhh->gerencia : ($oracle ? $oracle->area : null);
        $empleado->unidad     = $rrhh ? $rrhh->unidad : ($oracle ? $oracle->unidad : null);
        $empleado->entidad    = $rrhh ? $rrhh->entidad : ($oracle ? $oracle->entidad : null);
        $empleado->login      = $rrhh ? $rrhh->login : ($oracle ? $oracle->login : null);
        
        return $empleado;
    }
    
    public static function allEmpleados()
    {
        $oracle = ServiceEmpleadoORACLE::all();
        $rrhh   = ServiceEmpleadoRRHH::all();

        $empleados = collect();

        foreach ($oracle as $o) {
            $empleados->push((object) [
                'ci'      => $o->ci,
                'nombre'  => $o->nombre,
                'cargo'   => $o->cargo,
                'area'    => $o->area,
                'unidad'  => $o->unidad,
                'entidad' => $o->entidad,
                'login'   => $o->login,
                'fuente'  => 'oracle',
            ]);
        }

        foreach ($rrhh as $r) {
            $empleados->push((object) [
                'ci'      => $r->ci,
                'nombre'  => $r->a_paterno.' '.$r->a_materno.' '.$r->nombre,
                'cargo'   => $r->cargo,
                'area'    => $r->gerencia,
                'unidad'  => $r->unidad,
                'entidad' => $r->entidad,
                'fuente'  => 'rrhh',
                'login'   => $r->login,
            ]);
        }

        return $empleados;
    }

    public static function find_ci($ci)
    {
        // Primero buscar en Oracle
        $oracle = ServiceEmpleadoORACLE::where('ci',$ci)->first();

        // También en Postgres
        $rrhh   = ServiceEmpleadoRRHH::where('ci',$ci)->first();

        if (!$oracle && !$rrhh) {
            return null;
        }

        // Retornar objeto combinado, priorizando lo que quieras
        $empleado = new static();

        $empleado->ci         = $rrhh ? $rrhh->ci : ($oracle ? $oracle->ci : null);
        $empleado->nombre     = $rrhh ? ($rrhh->a_paterno.' '.$rrhh->a_materno.' '.$rrhh->nombre) :($oracle ? $oracle->nombre : null);
        $empleado->cargo      = $rrhh ? $rrhh->cargo : ($oracle ? $oracle->cargo : null);
        $empleado->area       = $rrhh ? $rrhh->gerencia : ($oracle ? $oracle->area : null);
        $empleado->unidad     = $rrhh ? $rrhh->unidad : ($oracle ? $oracle->unidad : null);
        $empleado->entidad    = $rrhh ? $rrhh->entidad : ($oracle ? $oracle->entidad : null);
        $empleado->login      = $rrhh ? $rrhh->login : ($oracle ? $oracle->login : null);
        return $empleado;
    }
}
