"use client";

import { useMemo } from "react";
import type { ConnectedAccount } from "@/types/workflow";
import { selectActiveAccounts } from "./project-selectors";
import { useProjectsStore } from "./projects-store";

interface AccountsStore {
  accounts: ConnectedAccount[];
  connect: (
    platform: string,
    profileName: string,
    tokens?: { accessToken?: string; expiresInDays?: number },
  ) => void;
  disconnect: (platform: string) => void;
}

function useAccountsStoreImpl(): AccountsStore;
function useAccountsStoreImpl<T>(selector: (state: AccountsStore) => T): T;
function useAccountsStoreImpl<T>(selector?: (state: AccountsStore) => T): T | AccountsStore {
  const accounts = useProjectsStore(selectActiveAccounts);
  const connect = useProjectsStore((s) => s.connectActiveAccount);
  const disconnect = useProjectsStore((s) => s.disconnectActiveAccount);

  const store = useMemo(
    (): AccountsStore => ({
      accounts,
      connect,
      disconnect,
    }),
    [accounts, connect, disconnect],
  );

  return selector ? selector(store) : store;
}

export const useAccountsStore = useAccountsStoreImpl;
