<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\ServicioDiagnostico;
use App\Models\User;
use Illuminate\Http\Request;

class AdminOrderController extends Controller
{
    // Asignar usuario responsable a la orden
    public function assignTrabajador(Request $request, $ordenId)
    {
        $orden = ServicioDiagnostico::findOrFail($ordenId);
        $trabajadorId = $request->input('trabajado_por');
        $orden->trabajado_por = $trabajadorId ?: null;
        $orden->save();
        return redirect()->back()->with('success', 'Usuario responsable asignado correctamente');
    }
    // Dashboard de órdenes
    public function index()
    {
        // Nuevas estadísticas
        $usuariosRegistrados = User::count();
        
        $usuariosConOrden = User::whereHas('serviciosDiagnostico')
            ->distinct()
            ->count();
        
        $usuariosAtendidos = ServicioDiagnostico::where('estado', 'atendido')
            ->distinct('user_id')
            ->count('user_id');
        
        $totalPersonal = User::where('role', 'admin')->count();

        // Órdenes recientes
        $ordenesRecientes = ServicioDiagnostico::with(['user', 'trabajador'])
            ->orderBy('created_at', 'desc')
            ->take(10)
            ->get();

        return view('admin.orders.dashboard', compact(
            'usuariosRegistrados',
            'usuariosConOrden',
            'usuariosAtendidos',
            'totalPersonal',
            'ordenesRecientes'
        ));
    }

    // Listar todas las órdenes
    public function listOrders()
    {
        $ordenes = ServicioDiagnostico::with(['user', 'trabajador'])
            ->orderBy('created_at', 'desc')
            ->paginate(15);

        return view('admin.orders.list', compact('ordenes'));
    }

    // Ver detalle de una orden
    public function show($ordenId)
    {
        $orden = ServicioDiagnostico::with('user')->findOrFail($ordenId);

        // Buscar el último pago completado del usuario asociado a la orden
        $pago = \App\Models\Pago::where('user_id', $orden->user_id)
            ->where('estado', 'completado')
            ->latest('fecha_pago')
            ->first();

        return view('admin.orders.detail', compact('orden', 'pago'));
    }

    // Cambiar estado de la orden
    public function changeStatus(Request $request, $ordenId)
    {
        $orden = ServicioDiagnostico::findOrFail($ordenId);
        
        $nuevoEstado = $request->input('estado');
        
        // Validar que el nuevo estado sea válido
        if (!in_array($nuevoEstado, ['pendiente', 'en_proceso', 'atendido', 'cancelado'])) {
            return response()->json(['error' => 'Estado inválido'], 422);
        }

        $orden->estado = $nuevoEstado;
        
        // Si se marca como atendido, registrar la fecha
        if ($nuevoEstado === 'atendido') {
            $orden->fecha_atencion = now();
        }
        
        $orden->save();

        return response()->json([
            'success' => true,
            'message' => 'Estado actualizado correctamente',
            'estado' => $orden->estado
        ]);
    }

    // Marcar documento como generado
    public function markDocument(Request $request, $ordenId)
    {
        $orden = ServicioDiagnostico::findOrFail($ordenId);
        $documento = $request->input('documento');

        // Toggle de documentos
        if ($documento === 'pei') {
            $orden->pei_generado = !$orden->pei_generado;
        } elseif ($documento === 'pat') {
            $orden->pat_generado = !$orden->pat_generado;
        } elseif ($documento === 'pci') {
            $orden->pci_generado = !$orden->pci_generado;
        } elseif ($documento === 'ri') {
            $orden->ri_generado = !$orden->ri_generado;
        } elseif ($documento === 'otros') {
            $orden->otros_docs_generado = !$orden->otros_docs_generado;
        }

        $orden->save();

        return response()->json([
            'success' => true,
            'message' => 'Documento actualizado',
            'documentosGenerados' => $orden->documentosGenerados(),
            'documentosFaltantes' => $orden->documentosFaltantes()
        ]);
    }

    // Agregar nota a la orden
    public function addNote(Request $request, $ordenId)
    {
        $orden = ServicioDiagnostico::findOrFail($ordenId);
        
        $orden->notas = $request->input('notas');
        $orden->save();

        return response()->json([
            'success' => true,
            'message' => 'Nota agregada correctamente'
        ]);
    }
}
