<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Support\Str;

use Laravel\Sanctum\HasApiTokens;

use Carbon\Carbon;

class AdminUser extends Authenticatable
{
    use HasFactory;
    use HasApiTokens; 
    use Notifiable;
    use SoftDeletes;

    protected $table = 'conx_users';

    protected $fillable = 
    [
        'first_name', 
        'last_name',
        'password', 
        'email_address',
        'email_verified_at', 
        'is_active',
        'role', 
        'remember_token', 
        'phone_num',
        'new_email_address',
        'enable_2fa', 
        'profile_picture',
    ];

    protected $hidden = 
    [
        'password',
    ];

    public function generateRefreshToken($user_id)
    {
        $current_date = Carbon::now();

        $token = hash('sha256', $plainTextToken = Str::random(80));

        $PRT = PersonalRefreshTokens::updateOrCreate(
            [
                'user_id' => $user_id,
                'is_admin' => true,
            ],
            [
                'user_id' => $user_id,
                'token' => $token,
                'is_admin' => true,
                'is_jobseeker' => false,
            ]
        );

        return [$PRT->id . '|' . $token . '|conx'];
    }

    public function isValidRefreshToken($id, $token)
    {
        $refreshToken = PersonalRefreshTokens::where(
            [
                'id' => $id,
                'token' => $token,
                'is_admin' => true,
            ]
        )->first();

        if ($refreshToken) 
        {
            return [
                'success' => true,
                'token' => $refreshToken
            ];

        } 
        else 
        {
            return [
                'success' => false,
                'message' => 'Ivalid refresh token.'
            ];
        }

        return null;
    }
}
