import type { PutInput } from "upend/types";
import { query as queryFn } from "../lib/entity";
import api from "../lib/api";

export function baseSearch(query: string) {
  return queryFn(
    `(or (matches (contains "${query}") ?  ?) (matches ? (contains "${query}") ?) (matches ? ? (contains "${query}")))`
  );
}

export function baseSearchOnce(query: string) {
  return api.query(
    `(or (matches (contains "${query}") ?  ?) (matches ? (contains "${query}") ?) (matches ? ? (contains "${query}")))`
  );
}

export async function createLabelled(label: string) {
  let body: PutInput;
  if (label.match("^[\\w]+://[\\w]")) {
    body = {
      entity: {
        t: "Url",
        c: label,
      },
    };
  } else {
    body = {
      attribute: "LBL",
      value: {
        t: "String",
        c: label,
      },
    };
  }

  try {
    const [_, entry] = await api.putEntry(body);
    return entry;
  } catch (error) {
    throw new Error(`Failed to create object: ${error}`);
  }
}
