import rxDb from "@/utils/database/rxConnect";
import { Collection } from "../collections";
import { Primary } from "../schema";
import { notice } from "@/core";
export function editableController() {
    const collection = Collection.name;
    const primary = Primary;
    return {
        // isEditable: rowData => rowData.not_editable === true, // only name(a) rows would be editable
        // isDeletable: rowData => rowData.not_deletable === true, // only name(a) rows would be deletable
        onRowAdd: newData => new Promise(async (resolve) => {
            try {
                const db = await rxDb();
                const parent = newData.parent || "";
                await db[collection].insert({ ...newData, parent });
                // show notice
                await notice({ title: `Created successful` });
            }
            catch (e) {
                console.error(e);
                // console.log(e.parameters.errors.toString())
                // show notice
                await notice({
                    title: `Created failed`,
                    severity: "error",
                    content: e.toString()
                });
            }
            resolve();
        }),
        onRowUpdate: newData => new Promise(async (resolve) => {
            try {
                const db = await rxDb();
                const query = db[collection]
                    .findOne()
                    .where(primary)
                    .eq(newData[primary]);
                await query.update({
                    $set: newData
                });
                // show notice
                await notice({ title: `Updated successful` });
            }
            catch (e) {
                console.error(e);
                // show notice
                await notice({
                    title: `Updated failed`,
                    severity: "error",
                    content: e.toString()
                });
            }
            resolve();
        }),
        onRowDelete: oldData => new Promise(async (resolve) => {
            try {
                const db = await rxDb();
                const query = db[collection]
                    .findOne()
                    .where(primary)
                    .eq(oldData[primary]);
                await query.remove();
                // show notice
                await notice({ title: `Deleted successful` });
            }
            catch (e) {
                console.error(e);
                // show notice
                await notice({
                    title: `Deleted failed`,
                    severity: "error",
                    content: e.toString()
                });
            }
            resolve();
        })
    };
}
