{{#if disclaimer}}// {{{ disclaimer }}}{{#if header}}
{{{header}}}{{/if}}{{/if}}

import { Ref } from "vue";
import { MobilettoOrmObject, MobilettoOrmPurgeResults, MobilettoOrmValidationErrors } from "mobiletto-orm-typedef";
import { {{ Name }}Type, {{ Name }}TypeDef } from "{{typeDefPackage}}";
import * as a from "{{utilsPath}}/serviceHelper.js";

export const {{ name }}Service = {
  find{{ Name }},
  create{{ Name }},
  update{{ Name }},
  delete{{ Name }},
};

function find{{ Name }}(
  serverErrors?: Ref<MobilettoOrmValidationErrors>,
): Promise<{{ Name }}Type> {
  return $fetch(`/api/model/{{ name }}/{{ typeDef.singleton }}`, a.authGet())
    .then(a.handleJsonResponse<{{ Name }}Type>)
    .catch(a.handleErrors(serverErrors)) as Promise<{{Name}}Type>;
}

function create{{ Name }}(
  {{ name }}: {{ Name }}Type,
  serverErrors: Ref<MobilettoOrmValidationErrors>,
): Promise<{{ Name }}Type> {
  return $fetch("/api/model/{{ name }}/{{ typeDef.singleton }}", a.authPutJson({{ name }}))
    .then(a.handleJsonResponse<{{ Name }}Type>)
    .catch(a.handleErrors(serverErrors)) as Promise<{{Name}}Type>;
}

function update{{ Name }}(
  {{ name }}: {{ Name }}Type,
  serverErrors: Ref<MobilettoOrmValidationErrors>,
): Promise<{{ Name }}Type> {
  return $fetch("/api/model/{{ name }}/{{ typeDef.singleton }}", a.authPatchJson({{ name }}))
    .then(a.handleJsonResponse<{{ Name }}Type>)
    .catch(a.handleErrors(serverErrors)) as Promise<{{Name}}Type>;
}

function delete{{ Name }}(
  serverErrors: Ref<MobilettoOrmValidationErrors>,
  purge?: boolean
): Promise<MobilettoOrmObject | MobilettoOrmPurgeResults> {
  return $fetch(`/api/model/{{ name }}/{{ typeDef.singleton }}/${purge ? `?purge=${purge}` : ""}`, a.authDelete())
    .then(a.handleJsonResponse<MobilettoOrmObject | MobilettoOrmPurgeResults>)
    .catch(a.handleErrors(serverErrors)) as Promise<{{Name}}Type>;
}
