<?php

namespace App\Http\Controllers\Api\Entidades;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;

use App\Http\Resources\Entidad as EntidadResource;
use App\Http\Resources\EntidadLite as EntidadLiteResource;
use App\Http\Resources\EntidadApto as EntidadAptoResource;
use App\Http\Resources\EntidadEdif as EntidadEdifResource;
use App\Http\Resources\EntidadDatos as EntidadDatosResource;

use App\Http\Controllers\Controller;
use App\Danoral\Entidades\Entidad;
use App\Danoral\Entidades\EntidadDatosView;
use App\Danoral\Entidades\SyncEntidades;

class EntidadController extends Controller
{
    protected $entidad;

    public function __construct(Entidad $entidad){
        $this->entidad = $entidad;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if(isset($request->idE)){
            
            if(isset($request->codApto)){
                //Entidad Apto
                $e = Entidad::where([
                    ['datose->cod->value', $request->codApto],
                    ['idESuper', $idE_edif]
                ])
                ->first();
                return response()->json(new EntidadAptoResource($e),200);
            }

            //Entidad
            $e = Entidad::where([
                ['idE', $request->idE]
            ])
            ->first();
            return response()->json(new EntidadResource($e),200);
        }

        if(isset($request->codEdif)){
            //Entidad Edif
            $e = Entidad::where([
                ['datose->cod->value', $request->codEdif]
            ])
            ->first();
            return response()->json(new EntidadEdifResource($e),200);
        }

        if(isset($request->idESuper)){    
            //sub-entidades
            $entidades = Entidad::Where([
                ['idESuper', $request->idESuper],
            ])
            ->orderBy(DB::raw("FORMAT('%10s', \"datose\"->'cod'->>'value')::bytea"), 'asc')
            ->get();
            return response()->json(EntidadLiteResource::collection($entidades),200);    
        }

        return null;
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Entidades\Entidad  $entidad
     * @return \Illuminate\Http\Response
     */
    public function show(Entidad $entidad)
    {
        $entidad->loadSub();
        //obtener codigo ESuper
        $eSuper = Entidad::find($entidad->idESuper);  
        if($eSuper){
            $datose = json_decode($eSuper->datose); 
            $entidad->codESuper = isset($datose->cod->value)?$datose->cod->value:'...';
        }
        return response()->json(new EntidadResource($entidad),200);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Entidades\Entidad  $entidad
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Entidad $entidad)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Entidades\Entidad  $entidad
     * @return \Illuminate\Http\Response
     */
    public function destroy(Entidad $entidad)
    {
        //
    }

    public function getEntidad_codCliente($codCliente){
        $eA = Entidad::getApto_codCliente($codCliente);
        return response()->json(new EntidadResource($eA),200);
    }

    public function getAptos(Request $request){
        $e_aptos = Entidad::getAptos($request->idESuper);
        return response()->json(EntidadAptoResource::collection($e_aptos),200);
    }

    public function getDolarizados(Request $request) {
        $entidades = Entidad::getDolarizados();

        $countSubE = 0;
        foreach($entidades as $e){
            $countSubE += $e->countSubE;
        }

        $resp = [
            'entidades'     => EntidadLiteResource::collection($entidades),
            'count'         => count($entidades),
            'countSubE'     => $countSubE,
        ];

        return response()->json($resp,200);
    }

    public function getDatos(Request $request) {
        $datos = EntidadDatosView::getDatos($request->idE);
        return response()->json(EntidadDatosResource::collection($datos),200);    
    }


    public function migrarEdif(Request $request){

        if(!isset($request->idE)){
            return response()->json('idE no valido', 200);
        }
        $edif = Entidad::find($request->idE);

        if(!$edif){
            return response()->json('Edificio No Encontrado', 200);
        }else{

            $id_Entidad = SyncEntidades::cambioID_edif_R($request->idE);

            //Edificio jsys
            $e_edif = DB::connection('mysql_danoral')
                ->table('entidades')
                ->leftJoin('entidadesedif', 'entidades.id_Entidad', '=', 'entidadesedif.id_Entidad')
                ->where([
                    ['id_TipoEntidad', 2],
                    ['entidades.id_Entidad', '=', $id_Entidad],
                ])
                ->first();

            if(!$e_edif){
                return response()->json('Edificio No Encontrado en sysDanoral', 200);
            }else{

                $resList = Entidad::actualizarEdif($e_edif);
                
                $edif = Entidad::find($request->idE);

                return response()->json([
                    'res'       => new EntidadEdifResource($edif),
                    'list'      => $resList,
                ],200);
                               
            }
        }
    }
}
