"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());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.destroy = exports.update = exports.read = exports.create = exports.search = void 0;
const utils_1 = require("./utils");
const table_1 = __importDefault(require("../table"));
function fixTable(table, params) {
    if (!params || !table) {
        return table;
    }
    if (params.tableId) {
        table._id = params.tableId;
    }
    if (!table.type) {
        table.type = "table";
    }
    return table;
}
function search(ctx, next) {
    return __awaiter(this, void 0, void 0, function* () {
        const { name } = ctx.request.body;
        yield table_1.default.fetch(ctx);
        ctx.body = (0, utils_1.search)(ctx.body, name);
        yield next();
    });
}
exports.search = search;
function create(ctx, next) {
    return __awaiter(this, void 0, void 0, function* () {
        yield table_1.default.save(ctx);
        yield next();
    });
}
exports.create = create;
function read(ctx, next) {
    return __awaiter(this, void 0, void 0, function* () {
        yield table_1.default.find(ctx);
        yield next();
    });
}
exports.read = read;
function update(ctx, next) {
    return __awaiter(this, void 0, void 0, function* () {
        ctx.request.body = yield (0, utils_1.addRev)(fixTable(ctx.request.body, ctx.params), ctx.params.tableId);
        yield table_1.default.save(ctx);
        yield next();
    });
}
exports.update = update;
function destroy(ctx, next) {
    return __awaiter(this, void 0, void 0, function* () {
        yield table_1.default.destroy(ctx);
        ctx.body = ctx.table;
        yield next();
    });
}
exports.destroy = destroy;
exports.default = {
    create,
    read,
    update,
    destroy,
    search,
};
