import {getAppApis, getTemplateApi, setupDatastore} from "budibase-core";
import {action} from "./helpers";

const addField = templateApi => type => (record, name) => {
    const field = templateApi.getNewField(type);
    field.name = name;
    field.type = type;
    field.label = name;
    templateApi.addField(
        record,
        field);
}

export default async (datastore) => {

    datastore = setupDatastore(datastore);
    const templateApi = await getTemplateApi(datastore);
    const addStringField = addField(templateApi)("string");
    const addDateField = addField(templateApi)("datetime");
    const addBoolField = addField(templateApi)("bool");

    const root = templateApi.getNewRootLevel();

    const clients = templateApi.getNewCollectionTemplate(root);
    clients.name = "clients";
    
    const client = templateApi.getNewRecordTemplate(clients);
    client.name = "client"
    addStringField(client, "FamilyName");
    addStringField(client, "Address1");
    addStringField(client, "Address2");
    addStringField(client, "Address3");
    addStringField(client, "Address4");
    addStringField(client, "Postcode");
    addDateField(client, "CreatedDate");

    const children = templateApi.getNewCollectionTemplate(client);
    children.name = "children";
    
    const child = templateApi.getNewRecordTemplate(children);
    child.name = "child";
    addStringField(child, "FirstName");
    addStringField(child, "Surname");
    addDateField(child, "DateOfBirth");
    addBoolField(child, "Current");

    const contacts = templateApi.getNewCollectionTemplate(client);
    contacts.name = "contacts";
    
    const contact = templateApi.getNewRecordTemplate(contacts);
    contact.name = "contact";
    addStringField(contact, "Name");
    addStringField(contact, "relationship");
    addStringField(contact, "phone1");
    addStringField(contact, "phone2");
    addBoolField(contact, "active");

    await templateApi.saveApplicationHeirarchy(root);

    const apis = await getAppApis(datastore);

    await apis.collectionApi.initialiseAll();

    return apis;

}




