<?php

namespace App\Http\Controllers;

use App\GrupoDeCompra;
use App\Helpers\CanastaHelper;
use App\Producto;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use League\Csv\Reader;
use DatabaseSeeder;

class ComisionesController
{
    const CANASTAS_PATH = 'csv/canastas/';
    const BARRIO = "Barrio";
    const SALDO = "Saldo";

    public function show()
    {
        return view('auth/login');
    }

    public function descargarPedidos(): BinaryFileResponse
    {
        Producto::planillaTotales();
        $pattern = storage_path('csv/exports/pedidos-por-barrio-*.csv');
        $files = glob($pattern);

        usort($files, function ($a, $b) {
            return filemtime($b) <=> filemtime($a);
        });

        return response()->download($files[0]);
    }

    public function descargarNotas(): BinaryFileResponse
    {
        Producto::planillaNotas();
        $pattern = storage_path('csv/exports/notas-por-barrio-*.csv');
        $files = glob($pattern);

        usort($files, function ($a, $b) {
            return filemtime($b) <=> filemtime($a);
        });

        return response()->download($files[0]);
    }

    public function pdf() {
        GrupoDeCompra::exportarPedidosBarrialesAPdf();
    }

    public function cargarCanasta(Request $request): JsonResponse
    {
        $request->validate([
            'data' => 'required|file|mimes:csv,txt|max:2048',
        ]);

        $nombre = CanastaHelper::guardarCanasta($request->file('data'), self::CANASTAS_PATH);
        CanastaHelper::cargarCanasta(self::CANASTAS_PATH . $nombre);

        return response()->json([
            'message' => 'Canasta cargada exitosamente',
        ]);
    }

    public function descargarCanastaEjemplo(): BinaryFileResponse
    {
        $file = storage_path('csv/productos.csv');
        return response()->download($file);
    }

    public function cargarSaldos(Request $request): JsonResponse
    {
        $request->validate([
            'data' => 'required|file|mimes:csv,txt|max:2048',
        ]);

        $file = $request->file('data')->getPathname();
        $csv = Reader::createFromPath($file, 'r');
        try {
            $csv->setDelimiter("|");
            $csv->setEnclosure("'");
            $csv->setHeaderOffset(0);
            $records = $csv->getRecords();
        } catch (InvalidArgument|Exception $e) {
            Log::error($e->getMessage());
            return response()->json([
                'message' => 'No se pudo leer el csv',
            ]);
        }

        foreach ($records as $record) {
            $barrio = $record[self::BARRIO];
            $saldo = $record[self::SALDO];
            GrupoDeCompra::where('nombre', $barrio)
                ->update(['saldo' => $saldo]);
        }

        return response()->json([
            'message' => 'Saldos cargados exitosamente',
        ]);
    }
}