<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Mpdf\Mpdf;
use League\Csv\CannotInsertRecord;
use League\Csv\Writer;
use App\Producto;
use DB;
use League\Csv\Reader;

class GrupoDeCompra extends Model
{
  public $timestamps = false;
  protected $fillable = [ "nombre","region","telefono","correo","referente_finanzas","cantidad_de_nucleos","fila"];
  protected $table = 'grupos_de_compra';
  protected $hidden = ['password'];

  public function subpedidos() {
  	return $this->hasMany('App\Subpedido');
  }

  public function pedidosAprobados() {
    return $this->subpedidos->where('aprobado',1);
  }

  public function exportarPlanillasAPdf() {
      $subpedidos = $this->pedidosAprobados();
      //generar pdf
      $mpdf = new Mpdf();
      foreach ($subpedidos as $subpedido) {
          $tabla = $subpedido->generarHTML();
          // agregar la tabla al pdf en una nueva página
          $mpdf->WriteHTML($tabla);
          $mpdf->AddPage();
      }
      $filename = $this->nombre . '.pdf';
      // imprimir el pdf
      $mpdf->Output($filename, "D");
  }

  //Asume que los productos están gruadados en orden de fila
  private function obtenerTemplateDeFilasVacias(){
    $productosFilaID = Producto::productosFilaID();
    $productosIDNombre = Producto::productosIDNombre();
    $num_fila = 1;
    $template = [];
    foreach ($productosFilaID as $fila => $id) {
      for ($i = $num_fila; $i < $fila; $i++) {
        $template[$i] = ["", "0"];
      }
      $template[$fila] = [$productosIDNombre[$id], "0"];
      $num_fila = $fila+1;
    }
    $template[$this->obtenerFilaDeBonoTransporte()] = ["Bonos de transporte", 0];
    return $template;
  }

  private function obtenerFilaDeBonoTransporte() {
    $csv = Reader::createFromPath(resource_path('csv/productos.csv'), 'r');
    $csv->setDelimiter("|");
    $csv->setEnclosure("'");
    $registros = $csv->getRecords();

    foreach($registros as $key => $registro)
      if ($registro[0] == 'T') return $key+1;

    throw new Exception('No hay bono de transporte');
  }

  private function totalPedidoSinBDT() {
    $total = 0;
    foreach ($this->subpedidos as $subpedido) {
      $total += $subpedido->totalSinBDT();
    }
    return $total;
  }

  private function  calcularCantidadBDT() {
      return ceil($this->totalPedidoSinBDT() / 500);
  }

  public function exportarPedidoEnCSV(){
    $productos_en_pedido = DB::table('pedidos_aprobados')->where('grupo_de_compra_id',$this->id)->get()->keyBy('producto_id');

    //si no hay pedidos aprobados, salir
    if ($productos_en_pedido->count() == 0) { \Log::debug("El grupo de compra ". $this->nombre . " no tiene pedidos aprobados."); return; }
    $records = $this->obtenerTemplateDeFilasVacias();
    $productos_id_fila = Producto::productosIdFila();
    foreach ($productos_en_pedido as $id => $producto_pedido){
      $fila = $productos_id_fila[$id];
      $records[$fila][1] = $producto_pedido->cantidad_pedida;
    }

    $records[$this->obtenerFilaDeBonoTransporte()][1] = $this->calcularCantidadBDT();

    try {
      $writer = Writer::createFromPath(resource_path('csv/exports/'.$this->nombre.'.csv'), 'w');
      $writer->insertAll($records);
    } catch (CannotInsertRecord $e) {
      var_export($e->getRecords());
    }
  }

  public static function exportarTodosLosPedidosEnCSV(){
    $gdcs=GrupoDeCompra::all();
    foreach ($gdcs as $gdc){ $gdc->exportarPedidoEnCSV(); }
  }

}