<?php
class FcmController extends BaseController
{
    public function registerDeviceToken()
    {
        $params = $this->request->getJsonRawBody(true);
        $validatedRequest = $this->validate(
            $params,
            [
                'token' => ['validators' => ['required']],
                'user_id' => ['validators' => ['required']]
            ]
        );

        $validatedRequest = $this->validate(
            $params,
            [
                'user_id' => ['validators' => ['digit']]
            ]
        );

        $result = UmUser::count(
            [
                'um_id = :user_id:',
                "bind" => [
                    "user_id" => $params["user_id"]
                ]
            ]
        );

        if ($result > 0) {
            $fcmDeviceToken = FcmDeviceToken::findFirst(
                [
                    "device_token = :token:",
                    "bind" => [
                        "token" => $params["token"]
                    ]
                ]
            );

            if (!$fcmDeviceToken) {
                $fcmDeviceToken = new FcmDeviceToken();
                $fcmDeviceToken->user_id = $params["user_id"];
                $fcmDeviceToken->device_token = $params["token"];
                $fcmDeviceToken->create();
            }

            return new PaginatedResponse([$fcmDeviceToken], 1, 1, 0);
        } else {
            throw new CustomErrorException(BaseResponse::DATA_NOT_FOUND, 'Invalid user id');
        }
    }

    public function unregisterDeviceToken(){
        $params = $this->request->getJsonRawBody(true);
        $validatedRequest = $this->validate(
            $params,
            [
                'token' => ['validators' => ['required']]
            ]
        );

        $fcmDeviceToken = FcmDeviceToken::findFirst(
            [
                "device_token = :token:",
                "bind" => [
                    "token" => $params["token"]
                ]
            ]
        );

        if ($fcmDeviceToken) {
            $fcmDeviceToken->delete();
        }

        return new ObjectResponse(
            [
                "success" => true
            ]
        );
    }
}

?>