<?php


namespace frontend\modules\api\controllers;

use common\behaviors\GsCors;
use common\classes\Debug;
use common\models\User;
use frontend\modules\api\models\LoginForm;
use Yii;
use yii\filters\ContentNegotiator;
use yii\helpers\ArrayHelper;
use yii\rest\ActiveController;
use yii\web\BadRequestHttpException;
use yii\web\Response;

class UserController extends ApiController
{
    public $modelClass = User::class;

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        if($this->action->id == "login"){
            unset($behaviors['authenticator']);
        }

        return $behaviors;
//        return ArrayHelper::merge(parent::behaviors(), [
//            [
//                'class' => ContentNegotiator::class,
//                'formats' => [
//                    'application/json' => Response::FORMAT_JSON,
//                ],
//            ],
//            'corsFilter' => [
//                'class' => GsCors::class,
//                'cors' => [
//                    'Origin' => ['*'],
//                    //'Access-Control-Allow-Credentials' => true,
//                    'Access-Control-Allow-Headers' => [
//                        'Access-Control-Allow-Origin',
//                        'Content-Type',
//                        'Access-Control-Allow-Headers',
//                        'Authorization',
//                        'X-Requested-With'
//                    ],
//                ]
//            ],
//        ]);
    }

    public function actions()
    {
        $actions = parent::actions();
        unset($actions['index']);
        unset($actions['create']);
        unset($actions['update']);
        unset($actions['delete']);
    }

//    protected function verbs(){
//        return [
//            'login' => ['POST']
//        ];
//    }

    public function actionLogin()
    {
        $model = new LoginForm();
        if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
            /** @var User $user */
            $user = $model->getUser();
            return [
                'access_token' => $model->login(),
                'access_token_expired_at' => $model->getUser()->getTokenExpiredAt(),
                'id' => $user->id,
                'status' => $user->userCard->status ?? null,
                'card_id' => $user->userCard->id ?? null,
            ];
        } else {
            throw new BadRequestHttpException(json_encode($model->errors));
        }
    }

    /**
     *
     * @OA\Get(path="/user/me",
     *   summary="Получить данные пользователя",
     *   description="Метод для получения данныех пользователя",
     *   security={
     *     {"bearerAuth": {}}
     *   },
     *   tags={"User"},
     *   @OA\Response(
     *     response=200,
     *     description="Возвращает данные пользователя",
     *     @OA\MediaType(
     *         mediaType="application/json",
     *     ),
     *   ),
     * )
     *
     * @return \frontend\modules\api\models\User
     * @throws BadRequestHttpException
     */
    public function actionMe(): \frontend\modules\api\models\User
    {
        $user = \frontend\modules\api\models\User::findOne(Yii::$app->user->id);
        if (!$user){
            throw new BadRequestHttpException("User not found");
        }

        return $user;
    }
}