<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Audit;
use App\Models\User;
use Illuminate\Support\Facades\Auth;

class AuditController extends Controller
{
    /**
     * Display a listing of audits.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        // Verificar permisos
        if (!Auth::user()->hasRole(['root', 'admin'])) {
            return redirect()->route('home')->with('error', 'No tiene permisos para acceder a esta sección');
        }
        
        $query = Audit::with('user')->orderBy('created_at', 'desc');
        
        // Filtros
        if ($request->has('user_id') && $request->user_id) {
            $query->where('user_id', $request->user_id);
        }
        
        if ($request->has('action') && $request->action) {
            $query->where('action', $request->action);
        }
        
        if ($request->has('model') && $request->model) {
            $query->where('model', 'like', '%' . $request->model . '%');
        }
        
        if ($request->has('date_from') && $request->date_from) {
            $query->whereDate('created_at', '>=', $request->date_from);
        }
        
        if ($request->has('date_to') && $request->date_to) {
            $query->whereDate('created_at', '<=', $request->date_to);
        }
        
        $audits = $query->paginate(20);
        $users = User::all()->pluck('name', 'id');
        
        // Acumulamos los modelos disponibles para el filtro
        $models = Audit::select('model')->distinct()->pluck('model');
        
        return view('admin.audits.index', compact('audits', 'users', 'models'));
    }
    
    /**
     * Display the specified audit.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        // Verificar permisos
        if (!Auth::user()->hasRole(['root', 'admin'])) {
            return redirect()->route('home')->with('error', 'No tiene permisos para acceder a esta sección');
        }
        
        $audit = Audit::with('user')->findOrFail($id);
        
        return view('admin.audits.show', compact('audit'));
    }
    
    /**
     * Eliminar registros de auditoría antiguos.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function cleanup(Request $request)
    {
        // Verificar permisos
        if (!Auth::user()->hasRole(['root'])) {
            return redirect()->route('admin.audits.index')->with('error', 'No tiene permisos para realizar esta acción');
        }
        
        $months = $request->input('months', 6);
        
        // Eliminar registros más antiguos que X meses
        $date = now()->subMonths($months);
        $count = Audit::where('created_at', '<', $date)->delete();
        
        return redirect()->route('admin.audits.index')
            ->with('success', "Se han eliminado {$count} registros de auditoría anteriores a {$date->format('d/m/Y')}");
    }
} 