<?php  

namespace App\JwtAuth;

use Exception;

class JwtCustomAuth{
    protected $claims = [];

    public function generateAuthToken()
    {
        // Aquí puedes definir los datos que deseas incluir en el token
        $customClaims = [
            'iat' => now()->timestamp,
        ];
        if(count($this->claims) != 0)
            array_push($customClaims, $this->claims);

        try {
            // Genera el token con los claims personalizados
            $token = $this->generateJwt($customClaims);
            dd($token);
            return $token;
        } catch (Exception $e) {
            dd($e);
            // Maneja cualquier error al generar el token
            return response()->json(['error' => 'Could not create token'], 500);
        }
    }

    public function generateAnonymousToken()
    {
        // Aquí puedes definir los datos que deseas incluir en el token
        $customClaims = [
            'sub' => 'anonymous', // un identificador o cualquier dato que consideres relevante
            'role' => 'guest',
            'iat' => now()->timestamp, // Timestamp actual
            // otros datos personalizados
        ];

        try {
            // Genera el token con los claims personalizados
            // $token = JWTAuth::claims($customClaims)->attempt();
            // return response()->json(['token' => $token], 200);
        } catch (Exception $e) {
            // Maneja cualquier error al generar el token
            dd($e);
            return response()->json(['error' => 'Could not create token'], 500);
        }
    }

    private function generateJwt($payload)
    {
        

        // $time = strtotime('+1 month', time());
        // // $payload['exp'] = $time;
        // $payload = [
        //     'iss' => env('JWT_ISSUER'), // Emisor del token
        //     'iat' => time(), // Tiempo de emisión del token
        //     'exp' => time() + 60 * 60 * 24, // Tiempo de expiración del token (1 día)
        //     'uid' => 1, // ID del usuario
        // ];
        // $claims = new Collection([
        //     'iss' => env('JWT_ISSUER'),
        //     'iat' => time(),
        //     'exp' => time() + 60 * 60 * 24, // Expiration time (1 day)
        //     'uid' => 1
        // ]);

        // $payload = new Payload($claims, new PayloadValidator());
        // // dd($payload);
        // $key = env('JWT_SECRET'); // Clave secreta de JWT
        // $token = JWTAuth::fromClaims($payload);

        return $token;
    }
}
