"use client";

import * as React from "react";

import {
  canShowCustomerTransactionCreate,
  EMPTY_CUSTOMER_PORTAL_CAPABILITIES,
  type CustomerPortalActorUser,
  type CustomerPortalCapabilities,
} from "@/lib/frontend-auth/report-capabilities";

type CustomerPortalSessionValue = {
  user: CustomerPortalActorUser;
  canCreateTransactions: boolean;
  /** Corporate Portfolio Scope picker (Users/Clients). Not session login-as. */
  portfolioScope: boolean;
  capabilities: CustomerPortalCapabilities;
};

const CustomerPortalSessionContext = React.createContext<CustomerPortalSessionValue>({
  user: null,
  canCreateTransactions: false,
  portfolioScope: false,
  capabilities: EMPTY_CUSTOMER_PORTAL_CAPABILITIES,
});

type CustomerPortalSessionProviderProps = {
  children: React.ReactNode;
  user: CustomerPortalActorUser;
  capabilities?: CustomerPortalCapabilities | null;
};

export function CustomerPortalSessionProvider({
  children,
  user,
  capabilities = null,
}: CustomerPortalSessionProviderProps) {
  const value = React.useMemo(() => {
    const resolved = capabilities ?? EMPTY_CUSTOMER_PORTAL_CAPABILITIES;
    return {
      user,
      canCreateTransactions: canShowCustomerTransactionCreate(user),
      portfolioScope: Boolean(resolved.portfolio_scope),
      capabilities: resolved,
    };
  }, [user, capabilities]);

  return (
    <CustomerPortalSessionContext.Provider value={value}>{children}</CustomerPortalSessionContext.Provider>
  );
}

export function useCustomerPortalSession() {
  return React.useContext(CustomerPortalSessionContext);
}
