<?php

namespace kernel\modules\secure\services;

use kernel\App;
use kernel\FormModel;
use kernel\helpers\Debug;
use kernel\modules\secure\models\SecretCode;
use kernel\modules\user\models\User;
use kernel\modules\user\service\UserService;
use kernel\services\TokenService;

class SecureService
{

    public static function createSecretCode(User $user): void
    {
        $secretCode = new SecretCode();
        $secretCode->user_id = $user->id;
        $secretCode->code = mt_rand(100000, 999999);
        $secretCode->code_expires_at = date("Y-m-d H:i:s", strtotime("+5 minutes"));;
        $secretCode->save();
    }

    public static function updateSecretCode(User $user): void
    {
        $secretCode = SecretCode::where('user_id', $user->id)->first();
        $secretCode->code = mt_rand(100000, 999999);
        $secretCode->code_expires_at = date("Y-m-d H:i:s", strtotime("+5 minutes"));;
        $secretCode->save();
    }

    public static function getCodeByUserId(int $user_id)
    {
        return SecretCode::where('user_id', $user_id)->one()->code;
    }

    public static function getByField(string $field, mixed $value)
    {
        return SecretCode::where($field, $value)->first();
    }

    public static function generateAccessToken(): string
    {
        return match (App::$secure['token_type']) {
            "JWT" => TokenService::JWT($_ENV['SECRET_KEY'], 'HS256'),
            "md5" => TokenService::md5(),
            "crypt" => TokenService::crypt(),
            "hash" => TokenService::hash('sha256'),
            default => TokenService::random_bytes(20),
        };
    }

}