<?php

namespace App\Http\Controllers;

use App\Models\Denuncia;
use App\Models\Parametro;
use Illuminate\Http\Request;

class DenunciaController extends Controller
{
    public function index(Request $request)
    {
        $denuncias = $this->queryFiltros($request)
            ->where('estado_actual', '<>', 'Finalizada')
            ->orderBy('created_at', 'desc')
            ->paginate(15)
            ->withQueryString();
        $estados = Parametro::where('tipo','estado_denuncia')->get();
        $tiposDenuncia=Parametro::where('tipo', 'tipo_denuncia')->get();
        return view('denuncias.index', [
            'denuncias' => $denuncias,
            'estados' => $estados,
            'tiposDenuncia' => $tiposDenuncia,
        ]);
    }

    public function finalizadas(Request $request)
    {
        $denuncias = $this->queryFiltros($request)
            ->where('estado_actual', 'Finalizada')
            ->orderBy('created_at', 'desc')
            ->paginate(15)
            ->withQueryString();
        $estados = Parametro::where('tipo','estado_denuncia')->get();
        $tiposDenuncia=Parametro::where('tipo', 'tipo_denuncia')->get();
        return view('denuncias.finalizadas', [
            'denuncias' => $denuncias,
            'estados' => $estados,
            'tiposDenuncia' => $tiposDenuncia,
        ]);
    }

    public function show(Denuncia $denuncia)
    {
        $denuncia->load([
            'denunciados',
            'pruebas',
            'seguimientos.usuario',
        ]);
        $estados = Parametro::where('tipo','estado_denuncia')->get();
        return view('denuncias.show', [
            'denuncia' => $denuncia,
            'estados' => $estados,
        ]);
    }

    private function queryFiltros(Request $request)
    {
        return Denuncia::with(['denunciados', 'user'])
            ->when($request->filled('fecha_inicio'), function ($query) use ($request) {
                $query->whereDate('created_at', '>=', $request->fecha_inicio);
            })
            ->when($request->filled('fecha_fin'), function ($query) use ($request) {
                $query->whereDate('created_at', '<=', $request->fecha_fin);
            })
            ->when($request->filled('estado'), function ($query) use ($request) {
                $query->where('estado_actual', $request->estado);
            })
            ->when($request->filled('es_anonima'), function ($query) use ($request) {
                $query->where('es_anonima', $request->es_anonima);
            })
            ->when($request->filled('es_reserva'), function ($query) use ($request) {
                $query->where('es_reserva', $request->es_reserva);
            })
            ->when($request->filled('presento_otra_instancia'), function ($query) use ($request) {
                $query->where('presento_otra_instancia', $request->presento_otra_instancia);
            })
            ->when($request->filled('tipo_denuncia'), function ($query) use ($request) {
                $query->where('tipo_denuncia', $request->tipo_denuncia);
            })
            ->when($request->filled('buscar'), function ($query) use ($request) {
                $buscar = $request->buscar;

                $query->where(function ($q) use ($buscar) {
                    $q->where('codigo', 'ILIKE', "%{$buscar}%")
                      ->orWhere('nombres', 'ILIKE', "%{$buscar}%")
                      ->orWhere('apellido_paterno', 'ILIKE', "%{$buscar}%")
                      ->orWhere('apellido_materno', 'ILIKE', "%{$buscar}%")
                      ->orWhere('numero_documento', 'ILIKE', "%{$buscar}%")
                      ->orWhere('correo_electronico', 'ILIKE', "%{$buscar}%");
                });
            });
    }
}