<?php

namespace App\controller;

use App\model\User;
use Core\annotations\Bean;
use Core\annotations\Value;
use Core\annotations\Redis;
use Core\annotations\Lock;
use Core\annotations\DB;
use Core\annotations\RequestMapping;
use Core\http\Request;
use Core\http\Response;
use Core\init\MyDB;
use Core\init\RedisHelper;
use DI\Attribute\Inject;
use Hyperf\Database\Connection;
use Mockery;
use \PDO;
use Hyperf\Database\Query\Grammars\MySqlGrammar;
use Core\BeanFactory;
/**
 * @Bean()
 */
class UserController
{
    /**
     * @DB()
     * @var MyDB
     */
    private $db;

    /**
     * @Value ()
     */
    public $version = '1.0';
    #[Inject]
    private User $user;

    /**
     * @RequestMapping(value="/user/test",method={"GET"})
     */
    public function test()
    {
        ///$connection = new Connection(PDO::class);
        ///$connection =  $connection->setQueryGrammar(new MySqlGrammar());
        ///$sql = $connection->table('eb_user')->toSql();
        // var_dump($connection->query($sql));
        //var_dump($user);
        //$this->db->select('select sleep(1)');
        //User::query('select sleep(3)');
        $user = User::first();
        return ['uid' => 33, 'username' => $user];
    }

    /**
     * @RequestMapping(value="/user/{uid:\d+}")
     */
    public function user(int $uid, Request $request, Response $response)
    {
        //BeanFactory::getBean('');
        //$user = $this->db->select('select * from eb_user where id = 1');
        return ['code' => 1, 'uid' => $uid];
    }

    /**
     * @RequestMapping(value="/redirect")
     */
    public function redirect(Request $request, Response $response)
    {
        $response->writeRedirect('http://www.baihand.com');
    }

    /**
     * @RequestMapping(value="/user/json")
     * @Redis(key="name")
     */
    public function json()
    {
        $user = $this->db->table('user')->get();
        return ['code' => 1, 'msg' => 'success', 'data' => $user];
    }

    /**
     * @Lock(prefix="lock",key="#0")
     * @RequestMapping(value="/user/lock/{uid:\d+}")
     */
    public function lock(Request $request, $uid, Response $response)
    {
        return $this->db->table('user')->get();
    }
}