import { defineStore } from "pinia";
import { sleep } from "../services/utils";
import { BillingAddress } from "../pages/payments/types"; // adjust the import path accordingly

// Simulated fetch function
const fetchBillingAddresses = async () => {
  await sleep(1000);
  return [
    {
      id: "1",
      name: "Home address",
      isPrimary: true,
      street: "Ap #285-7193 Ullamcorper Avenue",
      city: "Amesbury",
      state: "HI",
      postalCode: "93373",
      country: "US",
    },
    {
      id: "2",
      name: "Office address",
      isPrimary: false,
      street: "P.O. Box 847, 8011 Nisl St.",
      city: "Morgantown",
      state: "IN",
      postalCode: "46160",
      country: "US",
    },
    {
      id: "3",
      name: "Vacation home",
      isPrimary: false,
      street: "883-2699 Egestas Rd.",
      city: "Frederick",
      state: "NE",
      postalCode: "20620",
      country: "US",
    },
  ] as BillingAddress[];
};

export const useBillingAddressesStore = defineStore({
  id: "billingAddresses",
  state: () => ({
    billingAddresses: [] as BillingAddress[],
    loading: false,
  }),
  getters: {
    allBillingAddresses: (state) => state.billingAddresses,
  },
  actions: {
    async load() {
      this.loading = true;
      this.billingAddresses = await fetchBillingAddresses();
      this.loading = false;
    },
    create(address: BillingAddress) {
      this.billingAddresses.unshift(address);
    },
    update(address: BillingAddress) {
      const index = this.billingAddresses.findIndex(
        (existingCard) => existingCard.id === address.id,
      );
      if (index !== -1) {
        this.billingAddresses.splice(index, 1, address);
      }
    },
    remove(addressId: string) {
      this.billingAddresses = this.billingAddresses.filter(
        (address) => address.id !== addressId,
      );
    },
  },
});
