"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
const BaseAPIService_1 = require("./BaseAPIService");
class AccountChildService extends BaseAPIService_1.default {
    constructor(baseURL, token, accountId, serviceName) {
        super(baseURL, token, serviceName);
        this.accountId = accountId;
        this.path = `account/${accountId}/${serviceName}`;
    }
    list() {
        const _super = Object.create(null, {
            get: { get: () => super.get }
        });
        return __awaiter(this, void 0, void 0, function* () {
            return _super.get.call(this, this.path);
        });
    }
    get(id) {
        const _super = Object.create(null, {
            get: { get: () => super.get },
            publish: { get: () => super.publish }
        });
        return __awaiter(this, void 0, void 0, function* () {
            const response = _super.get.call(this, this.path + '/' + id);
            _super.publish.call(this, this.serviceName, {
                method: 'get',
                id,
                account: this.accountId,
                response,
            });
            return response;
        });
    }
    update(id, payload) {
        const _super = Object.create(null, {
            put: { get: () => super.put },
            publish: { get: () => super.publish }
        });
        return __awaiter(this, void 0, void 0, function* () {
            const response = _super.put.call(this, this.path + '/' + id, payload);
            _super.publish.call(this, this.serviceName, {
                method: 'update',
                id,
                account: this.accountId,
                response,
            });
            return response;
        });
    }
    create(payload) {
        const _super = Object.create(null, {
            post: { get: () => super.post },
            publish: { get: () => super.publish }
        });
        return __awaiter(this, void 0, void 0, function* () {
            const response = _super.post.call(this, this.path, payload);
            _super.publish.call(this, this.serviceName, {
                method: 'create',
                account: this.accountId,
                response,
            });
            return response;
        });
    }
    delete(id) {
        const _super = Object.create(null, {
            delete: { get: () => super.delete },
            publish: { get: () => super.publish }
        });
        return __awaiter(this, void 0, void 0, function* () {
            const response = _super.delete.call(this, this.path + '/' + id);
            _super.publish.call(this, this.serviceName, {
                method: 'delete',
                account: this.accountId,
                id,
                response,
            });
            return response;
        });
    }
}
exports.default = AccountChildService;
