<?php

namespace Predial\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;

class LiquidadorInteresesController extends Controller{

    public $path = "liquidador.";

    public function index(){
        if(!empty(session()->get('usuario'))){
            return view($this->path."index");
        }else{
            return redirect("CerrarSesion");
        }
    }

    public function getShowData(Request $request){
        $ff_v    = explode("/", $request->txtFechaV);
        $ff_p    = explode("/", $request->txtFechaPago);

        $fecha_v = "$ff_v[2]-$ff_v[1]-$ff_v[0]";
        $fecha_p = "$ff_p[2]-$ff_p[1]-$ff_p[0]";
        $html = "";
        $fecha_v = Carbon::createFromDate($ff_v[2], $ff_v[1], $ff_v[0]);
        $fecha_p = Carbon::createFromDate($ff_p[2], $ff_p[1], $ff_p[0]);
        $valor_i = str_replace(",", "", $request->txtImpuesto);

        $inicio  = $fecha_v;
        $fin     = $fecha_p;
        $i = 1;
        $xxx = 0;
        while($inicio <= $fin){
            $fwe     = Carbon::createFromDate(2008, 01, 01);

            if($inicio->year < "2008"){
                $data_i  = $inicio;
                $inicio  = Carbon::createFromDate(2008, 01, 01);
                $dias    = $inicio->diffInDays($data_i);
                $fecha_i = $inicio->format('Y-m-d');
                $dd = explode("-", $fecha_i);
                $fechafn = date("d/m/Y", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));
                $fecha_f = date("Y-m-d", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));

                if(($inicio->year == $fin->year) && ($inicio->month == $fin->month)){
                    $fechafn = $fin->format('d/m/Y');
                }

                $ff_fn   = explode("/", $fechafn);
                $fechaF  = Carbon::createFromDate($ff_fn[2], $ff_fn[1], $ff_fn[0]);
            }else{
                $fecha_i = $inicio->format('Y-m-d');
                $dd = explode("-", $fecha_i);
                $fechafn = date("d/m/Y", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));
                $fecha_f = date("Y-m-d", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));

                if(($inicio->year == $fin->year) && ($inicio->month == $fin->month)){
                    $fechafn = $fin->format('d/m/Y');
                }

                $ff_fn   = explode("/", $fechafn);
                $fechaF  = Carbon::createFromDate($ff_fn[2], $ff_fn[1], $ff_fn[0]);
                $dias    = (int) $fechaF->format('d');
            }

            $data_v  = DB::table('gr_interes_descuento as int')
                        ->select('int.valor')
                        ->leftJoin('gf_mes as ms', 'int.mes', '=', 'ms.id_unico')
                        ->where('int.anio', $inicio->format('Y'))
                        ->where('ms.numero', $inicio->format('m'))
                        ->where('int.tipo', '=', 1)
                        ->first();
            $int = number_format($data_v->valor, 2, '.', '.');
            $html .= "\n\t<tr>";
            $html .= "\n\t\t<td>".$inicio->format('Y')."</td>";
            $html .= "\n\t\t<td class='text-right'>".$inicio->format('d/m/Y')."</td>";
            $html .= "\n\t\t<td class='text-right'>$fechafn</td>";
            $html .= "\n\t\t<td class='text-right'>$int</td>";
            $html .= "\n\t\t<td class='text-right'>$dias</td>";
            $opr  = ((($valor_i * $int  * $dias) / 365) / 100);
            $xxx  += $opr;
            $html .= "\n\t\t<td class='text-right'>$".number_format($opr, 2, ',', '.')."</td>";
            $html .= "\n\t</tr>";
            $inicio = $inicio->addMonth(1);
        }
        $html .= "\n\t<tr>";
        $html .= "\n\t\t<td colspan='5'><b>TOTAL OBLIGACION</b></td>";
        $html .= "\n\t\t<td class='text-right'>$".number_format($valor_i, 2, ',', '.')."</td>";
        $html .= "\n\t</tr>";
        $html .= "\n\t<tr>";
        $html .= "\n\t\t<td colspan='5'><b>TOTAL INTERESES DE MORA LIQUIDADOS</b></td>";
        $html .= "\n\t\t<td class='text-right'>$".number_format($xxx, 2, ',', '.')."</td>";
        $html .= "\n\t</tr>";
        $total = $xxx + $valor_i;
        $html .= "\n\t<tr>";
        $html .= "\n\t\t<td colspan='5'><b>TOTAL A PAGAR</b></td>";
        $html .= "\n\t\t<td class='text-right'>$".number_format($total, 2, ',', '.')."</td>";
        $html .= "\n\t</tr>";
        return $html;
    }

    public function liquidar_intereses($valor_i, $fechaV, $fechaP, $fechaff){
        $ff_v    = explode("-", $fechaV);
        $ff_p    = explode("-", $fechaP);
        $ff_s    = explode("-", $fechaff);

        $fecha_v = Carbon::createFromDate($ff_v[0], $ff_v[1], $ff_v[2] + 1);
        $fecha_p = Carbon::createFromDate($ff_p[0], $ff_p[1], $ff_p[2]);
        $fecha_r = Carbon::createFromDate($ff_s[0], $ff_s[1], $ff_s[2]);
        
        $inicio  = $fecha_v;
        $fin     = $fecha_p;
        
        $i = 1;
        $xxx = 0;
        while($inicio->lessThan($fin)){
            $fwe     = Carbon::createFromDate(2008, 01, 01);

            if($inicio->year < "2008"){
                $data_i  = $inicio;
                $inicio  = Carbon::createFromDate(2008, 01, 01);
                $dias    = $inicio->diffInDays($data_i);
                $fecha_i = $inicio->format('Y-m-d');
                $dd = explode("-", $fecha_i);
                $fechafn = date("d/m/Y", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));
                $fecha_f = date("Y-m-d", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));

                if(($inicio->year == $fin->year) && ($inicio->month == $fin->month)){
                    $fechafn = $fin->format('d/m/Y');
                }

                $ff_fn   = explode("/", $fechafn);
                $fechaF  = Carbon::createFromDate($ff_fn[2], $ff_fn[1], $ff_fn[0]);
            }else{
                $fecha_i = $inicio->format('Y-m-d');
                $dd = explode("-", $fecha_i);
                $fechafn = date("d/m/Y", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));
                $fecha_f = date("Y-m-d", mktime(0, 0, 0, $dd[1] + 1, 0,$dd[0]));

                if(($inicio->year == $fin->year) && ($inicio->month == $fin->month)){
                    $fechafn = $fin->format('d/m/Y');
                }

                $ff_fn   = explode("/", $fechafn);
                $fechaF  = Carbon::createFromDate($ff_fn[2], $ff_fn[1], $ff_fn[0]);

                $dias    = (int) $fechaF->format('d');
            }

            if($fechaF->format('Y-m-d') > $fechaff){
                $dias = (int) $fecha_r->format('d');
            }


            $data_v  = DB::table('gr_interes_descuento as int')
                        ->select('int.valor')
                        ->leftJoin('gf_mes as ms', 'int.mes', '=', 'ms.id_unico')
                        ->where('int.anio', $inicio->format('Y'))
                        ->where('ms.numero', $inicio->format('m'))
                        ->where('int.tipo', '=', 1)
                        ->first();
            $opr = 0;            
            if(isset($data_v->valor)){
                $int = number_format($data_v->valor, 2, '.', '.');
                $opr  = (int) ((($valor_i * ($int / 100))  * $dias) / 366);
                $mmm  = substr($opr, -3);
            }
            
            // if($mmm >= 500){
            //     $opr = ceil($opr / 1000) * 1000;
            // }else{
            //     $opr = floor($opr / 1000) * 1000;
            // }
              
            $xxx  += $opr;
            $inicio = $inicio->addMonth(1);
        }
        $total = $xxx + $valor_i;
        return $xxx;
    }

    /**
     * obtenerPorcentaje
     * @author Alexander Numpaque
     * @package Predial
     * @param String $anno valor de año
     * @param String $nmes número de mes
     * @param int $tipo id de tipo de interes
     * @return int $data->valor Porcentaje de interes
     */
    public static function obtenerPorcentaje($anno, $nmes, $tipo){
        $data = DB::table('gr_interes_descuento as int')
                        ->select('int.valor')
                        ->leftJoin('gf_mes as ms', 'int.mes', '=', 'ms.id_unico')
                        ->where('int.anio', $anno)
                        ->where('ms.numero', $nmes)
                        ->where('int.tipo', '=', $tipo)
                        ->first();
        if(count($data) > 0){
            return $data->valor;
        }else{
            return 0;
        }
    }
}
