<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\ApiService;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Hash;

class ProfileController extends Controller
{
    protected $apiService;

    public function __construct(ApiService $apiService)
    {
        $this->apiService = $apiService;
    }

    /**
     * Mostrar perfil del usuario
     */
    public function index()
    {
        $userData = session('user_data', []);
        
        // Si no hay datos en sesión, obtenerlos de la API
        if (empty($userData)) {
            try {
                $response = $this->apiService->makeApiRequest('GET', config('api.auth.user'), [], [], 'get_user_profile');
                
                if ($response && isset($response['success']) && $response['success']) {
                    $userData = $response['data']['user'] ?? [];
                } else {
                    $userData = [];
                    session()->flash('error', 'No se pudieron cargar los datos del perfil.');
                }
            } catch (\Exception $e) {
                Log::error('Error fetching user profile', [
                    'error' => $e->getMessage()
                ]);
                $userData = [];
                session()->flash('error', 'Error al conectar con el servidor.');
            }
        }

        return view('profile.index', compact('userData'));
    }

    /**
     * Cambiar contraseña
     */
    public function changePassword(Request $request)
    {
        $request->validate([
            'current_password' => 'required|string',
            'new_password' => 'required|string|min:8|confirmed',
            'new_password_confirmation' => 'required|string'
        ], [
            'current_password.required' => 'La contraseña actual es obligatoria.',
            'new_password.required' => 'La nueva contraseña es obligatoria.',
            'new_password.min' => 'La nueva contraseña debe tener al menos 8 caracteres.',
            'new_password.confirmed' => 'La confirmación de contraseña no coincide.',
            'new_password_confirmation.required' => 'La confirmación de contraseña es obligatoria.'
        ]);

        try {
            $response = $this->apiService->makeApiRequest('POST', config('api.auth.change_password'), [
                'current_password' => $request->current_password,
                'new_password' => $request->new_password,
                'new_password_confirmation' => $request->new_password_confirmation
            ], [], 'change_password');

            if ($response && isset($response['success']) && $response['success']) {
                return redirect()->route('profile.index')
                    ->with('success', 'Contraseña cambiada exitosamente.');
            } else {
                $message = $response['data']['message'] ?? $response['message'] ?? 'Error al cambiar contraseña';
                return back()->withErrors(['current_password' => $message]);
            }

        } catch (\Exception $e) {
            Log::error('Error changing password', [
                'error' => $e->getMessage(),
                'user' => session('backoffice_user')
            ]);

            return back()->withErrors(['current_password' => 'Error al conectar con el servidor.']);
        }
    }
}