import { throwException } from "@/lib/error";
import { StrapiGet, StrapiPost, StrapiPut } from "./fetcher";

export async function getStrapiMemberByEmail(email: string) {
  const response: {
    data: {
      email: string;
      hashedPassword: string;
      isSuspended: boolean;
      documentId: string;
    }[];
  } = await StrapiGet("/members", {
    filters: {
      email: { $eq: email },
    },
  });
  if (response.data.length === 0) {
    return null;
  }
  return response.data;
}

export async function upsertStrapiFederatedAccount(
  memeberDocId: string,
  scope: string,
  sub: string,
  issuer: string,
) {
  try {
    const federatedDocs: { data: { documentId: string }[] } = await StrapiGet(
      "/federation-accounts",
      {
        filters: {
          sub: { $eq: sub },
        },
      },
    );
    if (federatedDocs.data && federatedDocs.data.length > 0) {
      await StrapiPut(
        `/federation-accounts/${federatedDocs.data[0].documentId}`,
        null,
        {
          data: {
            scope,
            issuer,
          },
        },
      );
    } else {
      await StrapiPost("/federation-accounts", null, {
        data: {
          member: memeberDocId,
          scope,
          sub,
          issuer,
        },
      });
    }
  } catch (error) {
    throwException(error);
  }
}
