<?php
namespace App\Controller;

use Carbon\Carbon;
use App\Definition\Controller;
use Incoviba\old\Proyecto\Proyecto;

class Contabilidad {
  use Controller;

  /**
   * Obtener Proyecto y fecha
   * Listar Proyectos y fechas
   * Listar pagos realizados en esa fecha para detalle de contabilidad
   */
  public static function get_proyectos() {
    $proyectos = model(Proyecto::class)->orderByAsc('descripcion')->findMany();
    foreach ($proyectos as &$proyecto) {
      $arr = $proyecto->asArray();
      $arr['direccion'] = $proyecto->direccion()->asArray();
      $arr['direccion']['comuna'] = $proyecto->direccion()->comuna()->asArray();
      $arr['inmobiliaria'] = $proyecto->inmobiliaria()->asArray();
      $proyecto = $arr;
    }
    return json_encode(compact('proyectos'));
  }
  public static function get_fechas() {
    $id_proyecto = get('proyecto');
    $proyecto = model(Proyecto::class)->findOne($id_proyecto);
    $cuotas = [];
    foreach ($proyecto->ventas() as $venta) {
      $cs = $venta->pie()->cuotas();
      $cuotas = array_merge($cs, array_filter($cs, function($item) {
        $tipo = $item->pago()->estado()->tipo();
        return ($tipo == 'depositado' or $tipo == 'abonado');
      }));
    }
    $fechas = array_map(function($item) {
      return [
        'timestamp' => $item->pago()->estado()->fecha()->timestamp,
        'short' => $item->pago()->estado()->fecha()->format('Y-m-d'),
        'long' => $item->pago()->estado()->fecha()->format('d / m / Y')
      ];
    }, $cuotas);
    usort($fechas, function($a, $b) {
      return $b['timestamp'] - $a['timestamp'];
    });
    return json_encode(compact('fechas'));
  }
  public static function get_pagos_fechas() {
    $id_proyecto = get('proyecto');
    $fecha = Carbon::parse(get('fecha'));
    $proyecto = model(Proyecto::class)->findOne($id_proyecto);
    $pagos = [];
    foreach ($proyecto->ventas() as $venta) {
      foreach ($venta->pie()->cuotas() as $cuota) {
        if ($cuota->pago()->estado()->fecha() == $fecha) {
          $pagos []= [
            'Departamento' => $venta->propiedad()->unidad()->descripcion,
            'Valor' => [
              'UF' => $cuota->pago()->valor('ufs'),
              'Pesos' => $cuota->pago()->valor()
            ],
            'Numero' => $cuota->numero(),
            'Total' => $venta->pie()->cuotas
          ];
          break;
        }
      }
    }
    return json_encode(compact('pagos'));
  }
  public static function pagos_fecha() {
    $fecha = Carbon::now();
    return view('contabilidad.pagos', compact('fecha'));
  }
  public static function show_pagos() {
    $id_proyecto = get('proyecto');
    $fecha = Carbon::parse(get('fecha'));
    $proyecto = model(Proyecto::class)->findOne($id_proyecto);
    $pagos = [];
    foreach ($proyecto->ventas() as $venta) {
      foreach ($venta->pie()->cuotas() as $cuota) {
        if ($cuota->pago()->estado()->fecha() == $fecha) {
          $pagos []= (object) [
            'Departamento' => $venta->propiedad()->unidad()->descripcion,
            'Valor' => (object) [
              'UF' => $cuota->pago()->valor('ufs'),
              'Pesos' => $cuota->pago()->valor()
            ],
            'Numero' => $cuota->numero(),
            'Total' => $venta->pie()->cuotas
          ];
          break;
        }
      }
    }
    return view('contabilidad.pago', compact('proyecto', 'fecha', 'pagos'));
  }
}
