<?php

namespace App\Services\Api;

class ApiResponse
{
    /**
     * Genera una respuesta exitosa estandarizada
     *
     * @param string $action
     * @param array $data
     * @param int $code
     * @return \Illuminate\Http\JsonResponse
     */
    public static function success(string $action, array $data = [], int $code = 0): \Illuminate\Http\JsonResponse
    {
        return response()->json([
            'success' => true,
            'error' => '',
            'code' => $code,
            'action' => $action,
            'data' => $data,
        ]);
    }

    /**
     * Genera una respuesta de error estandarizada
     *
     * @param string|null $action
     * @param string $error
     * @param int $code
     * @param array $data
     * @param int $httpStatus
     * @return \Illuminate\Http\JsonResponse
     */
    public static function error(
        ?string $action,
        string $error,
        int $code = 0,
        array $data = [],
        int $httpStatus = 400
    ): \Illuminate\Http\JsonResponse {
        return response()->json([
            'success' => false,
            'error' => $error,
            'code' => $code,
            'action' => $action,
            'data' => $data,
        ], $httpStatus);
    }

    /**
     * Genera una respuesta de error de autenticación (401)
     *
     * @param string $error
     * @return \Illuminate\Http\JsonResponse
     */
    public static function unauthorized(string $error = 'Invalid bearer token'): \Illuminate\Http\JsonResponse
    {
        return response()->json([
            'success' => false,
            'error' => $error,
            'code' => 401,
            'action' => null,
            'data' => [],
        ], 401);
    }

    /**
     * Genera una respuesta de error de autorización (403)
     *
     * @param string $error
     * @return \Illuminate\Http\JsonResponse
     */
    public static function forbidden(string $error): \Illuminate\Http\JsonResponse
    {
        return response()->json([
            'success' => false,
            'error' => $error,
            'code' => 403,
            'action' => null,
            'data' => [],
        ], 403);
    }
}

