import UserMiddleware from "../Middleware/UserAuthorization";
import UserIncomingCallNumberService from "../Services/UserIncomingCallNumberService";
import Response from "../Utils/Response";
import BaseAPI from "./BaseAPI";
import BadDataException from "../../Types/Exception/BadDataException";
import UserIncomingCallNumber from "../../Models/DatabaseModels/UserIncomingCallNumber";
export default class UserIncomingCallNumberAPI extends BaseAPI {
    constructor() {
        super(UserIncomingCallNumber, UserIncomingCallNumberService);
        this.router.post(`/user-incoming-call-number/verify`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
            var _a, _b, _c;
            try {
                req = req;
                if (!req.body.itemId) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Invalid item ID"));
                }
                if (!req.body.code) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Invalid code"));
                }
                // Check if the code matches and verify the phone number
                const item = await this.service.findOneById({
                    id: req.body["itemId"],
                    props: {
                        isRoot: true,
                    },
                    select: {
                        userId: true,
                        verificationCode: true,
                    },
                });
                if (!item) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Item not found"));
                }
                // Check user ID
                if (((_a = item.userId) === null || _a === void 0 ? void 0 : _a.toString()) !==
                    ((_c = (_b = req === null || req === void 0 ? void 0 : req.userAuthorization) === null || _b === void 0 ? void 0 : _b.userId) === null || _c === void 0 ? void 0 : _c.toString())) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Invalid user ID"));
                }
                if (item.verificationCode !== req.body["code"]) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Invalid code"));
                }
                await this.service.updateOneById({
                    id: item.id,
                    props: {
                        isRoot: true,
                    },
                    data: {
                        isVerified: true,
                    },
                });
                return Response.sendEmptySuccessResponse(req, res);
            }
            catch (err) {
                return next(err);
            }
        });
        this.router.post(`/user-incoming-call-number/resend-verification-code`, UserMiddleware.getUserMiddleware, async (req, res, next) => {
            try {
                req = req;
                if (!req.body.itemId) {
                    return Response.sendErrorResponse(req, res, new BadDataException("Invalid item ID"));
                }
                await this.service.resendVerificationCode(req.body.itemId);
                return Response.sendEmptySuccessResponse(req, res);
            }
            catch (err) {
                return next(err);
            }
        });
    }
}
//# sourceMappingURL=UserIncomingCallNumberAPI.js.map