import { userFetchUser } from "#openapi";

document.addEventListener("alpine:init", () => {
  Alpine.data("existing_user_subscription_form", () => ({
    loading: false,
    profileFragment: "" as string,

    async init() {
      const userSelect = document.getElementById("id_member") as HTMLSelectElement;
      userSelect.addEventListener("change", async () => {
        await this.loadProfile(Number.parseInt(userSelect.value, 10));
      });
      await this.loadProfile(Number.parseInt(userSelect.value, 10));
    },

    async loadProfile(userId: number) {
      const birthdayInput = document.getElementById("id_birthdate") as HTMLInputElement;
      if (!Number.isInteger(userId)) {
        this.profileFragment = "";
        birthdayInput.hidden = true;
        return;
      }
      this.loading = true;
      const [miniProfile, userInfos] = await Promise.all([
        fetch(`/user/${userId}/mini/`),
        // biome-ignore lint/style/useNamingConvention: api is snake_case
        userFetchUser({ path: { user_id: userId } }),
      ]);
      this.profileFragment = await miniProfile.text();
      // If the user has no birthdate yet, show the form input
      // to fill this info.
      // Else keep the input hidden and change its value to the user birthdate
      birthdayInput.value = userInfos.data.date_of_birth;
      birthdayInput.hidden = userInfos.data.date_of_birth !== null;
      this.loading = false;
    },
  }));
});
