<?php

namespace App\Http\Controllers\Api\Cuotas;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Query\Builder;

use App\Danoral\Cuotas\Cuota;
use App\Danoral\Cuotas\CuotaCond;
use App\Danoral\Cuotas\CuotaE;
use App\Danoral\Cuotas\CuotaView;
use App\Danoral\Entidades\Entidad;
use App\Danoral\Entidades\SyncEntidades;
use App\Danoral\Transacciones\Trans;
use App\Danoral\Transacciones\TransDT;

use App\Http\Resources\Cuota as CuotaResources;
use App\Http\Resources\CuotaE as CuotaEResources;
use App\Http\Resources\CuotaCond as CuotaCondResources;
use App\Http\Resources\CuotaEdif as CuotaEdifResources;
use App\Http\Resources\CobrosJSys as CobrosJSysResources;

class CuotaController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        //return response()->json(CuotaResources::collection(Cuota::get()),200);

        $idE = $request->idE;

        if($idE < 999999999){
            $idE = SyncEntidades::cambioID_apto($idE);
        }

        $cuotas = CuotaView::where([
            ['cuotas_view.idE', $idE],
            ['cuotas_view.idDTCuotaCobro', null]
        ])
        ->orderBy('cuotas_view.anoDT', 'asc')
        ->orderBy('cuotas_view.mesDT', 'asc')
        ->get();

        $cuotaCol = CuotaResources::classollection($cuotas);

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

    /**
     * Store a newly created resource in storage.
     * 
     * recibe un arry de cuotas para guardar
     * si se guarda una sola se genera un array con ese unico elemento
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $cuotas = $request->all();

        foreach ($cuotas AS $cuota) {

            /*
            $entidad = Entidad::firstWhere([
                ['dataE->codE->value', $dataCond['idE']]
            ]);
            */

            $monto = floatval(str_replace(",",".",$cuota['monto']));
            $montoOrigen = floatval(str_replace(",",".",$cuota['montoOrigen']));



            $dataCuota = [
                'idE'           => $cuota['idE'],
                'anoDT'         => $cuota['ano'],
                'mesDT'         => $cuota['mes'],
                'montoDT'       => $monto,
                'idMoneda'      => $cuota['idMoneda'],
                'idT'           => $cuota['idT'],
                'idCond'        => $cuota['idCond'],
                'montoOrigen'   => $montoOrigen,
            ];
            
            //$res = Cuota::createCuota($dataCuota); 

            /*
            if($res !== 'OK123'){
                return response()->json($res, 200);
            }
            */

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

    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //return response()->json($id, 200);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    public static function getCuotas(Request $request){
        $idE = $request->idE;

        $cuotav = CuotaView::select([
            'edif.datose->cod->value as codEdif',
            'apto.datose->cod->value as codApto',
            'cuotas_view.*',
        ])
        ->where([
            ['edif.idE', $idE],
        ])
        ->leftJoin('admin.entidades as apto', 'apto.idE', '=', 'cuotas_view.idE')
        ->leftJoin('admin.entidades as edif', 'edif.idE', '=', 'apto.idESuper')
        ->orderBy(DB::raw("FORMAT('%10s', \"apto\".\"datose\"->'cod'->>'value')::bytea"), 'asc')
        ->orderBy('anoDT', 'asc')
        ->orderBy('mesDT', 'asc')
        ->get();

        return response()->json(CuotaEdifResources::collection($cuotav), 200);
         
    }

    public static function getCuotasEntidadX($idE){

        if($idE < 999999999){
            $idE = SyncEntidades::cambioID_apto($idE);
        }


        /*
        $cuotas = Cuota::where([
                ['admin.cuotas.idE', $idE],
            ])
            ->leftJoin('admin.transdt', 'admin.transdt.idDT', '=', 'admin.cuotas.idDTCuota')
            ->leftJoin('admin.condominios', 'admin.condominios.idCond', '=', 'admin.cuotas.idCond')
            ->orderBy('admin.transdt.anoDT', 'asc')
            ->orderBy('admin.transdt.mesDT', 'asc')
            ->get();
        */
        $cuotas = CuotaView::where([
                ['cuotas_view.idE', $idE],
                ['cuotas_view.idDTCuotaCobro', null]
            ])
            ->orderBy('cuotas_view.anoDT', 'asc')
            ->orderBy('cuotas_view.mesDT', 'asc')
            ->get();


        $cuotaCol = CuotaResources::collection($cuotas);

        //$cuotaCol = $cuotaCol->sortBy('ano');

        // return $cuotaCol->sortBy('ano');

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

    public static function getCuotasNotiPago($idNP){

        $cuotas = CuotaView::select([
                'cuotas_view.*',
                'np.datePagoNP AS fecha_calculo_tasa'
            ])
            ->where([
                ['np.idNP', $idNP],
            ])
            ->leftJoin('admin.noti_pagos as np', 'np.idE', '=', 'cuotas_view.idE')
            ->orderBy('cuotas_view.anoDT', 'asc')
            ->orderBy('cuotas_view.mesDT', 'asc')
            ->get();


        $cuotaCol = CuotaResources::collection($cuotas);

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

    public static function getCuotaE(Request $request){
        $input = $request->all();
        $res = CuotaE::getCuotaE($input);

        return response()->json(new CuotaEResources($res), 200);
    }

    public static function getCuotasTrans(Request $request){
        //return response()->json('getCuotasTrans OK', 200);

        return response()->json(CuotaCondResources::collection(
            CuotaCond::getCuotasCond(null, null, false, null, $request->idT)
        ), 200);
        
    }

    public static function altaCuota(Request $request, $id){

        $cuota = Cuota::find($id);
        $cuota->idDTCuotaCobro = null;
        $cuota->save();
    
        return response()->json('altaCuota OK', 200);
    }

    public static function eliminarCuotaInicial(Request $request) {
        $res = Cuota::eliminarCuotaInicial($request->idE);

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

    public static function generarCuotasIniciales(Request $request){

        $idE = $request->idE;
        $idT = $request->idT;
        $cuotas = $request->cuotas;

        foreach ($cuotas AS $cuota) {

            $apto = DB::table('admin.entidades')
            ->where('idESuper', $idE)
            ->where('datose->cod->value', $cuota['codApto'])
            ->first();


            if(!$apto) {
                return response()->json('Apto no encontrado: '. $cuota['codApto'], 200);
            }

            $monto = $cuota['monto_valor'];
            $montoOrigen = $cuota['montoOrigen'];

            $dataCuota = [
                'idE'           => $apto->idE,
                'anoDT'         => $cuota['ano'],
                'mesDT'         => $cuota['mes'],
                'montoDT'       => $monto,
                'idMoneda'      => $cuota['idMoneda'],
                'idT'           => $idT,
                'idCond'        => $cuota['idCond'],
                'montoOrigen'   => $montoOrigen,
            ];

            //return response()->json($dataCuota, 200);
            
            $res = Cuota::createCuota($dataCuota); 

            if($res !== 'OK123'){
                return response()->json($res, 200);
            }

        }
        return response()->json('Procesado con exito', 200);

    }

    public static function getCobro_jsys(Request $request){
        $idE = $request->idE;

        $cobros = collect();
        $cxs = array('mysql_danoral', 'mysql_danoral23', 'mysql_danoral22', 'mysql_danoral21d', 'mysql_danoral21', 'mysql_danoral20');

        foreach($cxs as $cx){

            $c = DB::connection($cx)
            ->table('itemsdt_view')
            ->select([
                'entidades.id_EntidadPadre',
                'entidades.cod_Entidad',
                'itemsdt_view.id_Entidad',
                'itemsdt_view.fechaT',
                'itemsdt_view.ctaDT',
                'itemsdt_view.montoDT',
                'itemsdt_view.refT',
                'itemsdt_view.descripcion_itemsdt_des',
            ])
            ->leftJoin('entidades', 'itemsdt_view.id_Entidad', '=', 'entidades.id_Entidad')
            ->where(
                function (Builder $query) use ($idE) {
                    $query
                        ->orWhere('itemsdt_view.id_Entidad',    SyncEntidades::cambioID_apto_R($idE))
                        ->orWhere('entidades.id_EntidadPadre',  SyncEntidades::cambioID_edif_R($idE));
                }
            )
            ->where('itemsdt_view.tipoDT', 1)
            //->where('itemsdt_view.ctaDT', 130)
            //->where('itemsdt_view.ctaT', 109)
            ->get();

            $cobros = $cobros->merge($c);

        }

        $cobros = $cobros->sortBy('fechaT');

        return response()->json(CobrosJSysResources::collection($cobros), 200);
    }

}
