
import { useState } from "react";
import { useInvitationVerifier } from "./useInvitationVerifier";
import { useSessionChecker } from "./useSessionChecker";
import { useAuthFormSubmit } from "./useAuthFormSubmit";
import { SignupFormData, PasswordSetFormData } from "@/components/auth/schemas";

export function useSignupLogic() {
  const [activeTab, setActiveTab] = useState<"signup" | "setPassword">("signup");

  // Get invitation verification data
  const {
    isInvitedUser,
    invitedEmail,
    invitedName,
    isVerifying,
    verificationError,
    setIsInvitedUser,
    setInvitedEmail,
    setInvitedName
  } = useInvitationVerifier();

  // Get session check data
  const sessionData = useSessionChecker();

  // If we already have session data for an invited user, use that
  if (!invitedEmail && sessionData.invitedEmail) {
    setInvitedEmail(sessionData.invitedEmail);
  }

  if (!invitedName && sessionData.invitedName) {
    setInvitedName(sessionData.invitedName);
  }

  if (!isInvitedUser && sessionData.isInvitedUser) {
    setIsInvitedUser(sessionData.isInvitedUser);
  }

  // Get form submission handlers
  const {
    isSubmitting,
    confirmationEmail,
    isResending,
    resendCooldown,
    onSignup,
    onResendConfirmation,
    onSetPassword,
  } = useAuthFormSubmit(isInvitedUser);

  // Handle password setting with email context
  const handleSetPassword = (values: PasswordSetFormData) => {
    return onSetPassword(values, invitedEmail);
  };

  return {
    isSubmitting,
    confirmationEmail,
    isResending,
    resendCooldown,
    isInvitedUser,
    invitedEmail,
    invitedName,
    activeTab,
    setActiveTab,
    isVerifying,
    isVerifyingUser: sessionData.isVerifyingUser,
    verificationError,
    onSignup,
    onResendConfirmation,
    onSetPassword: handleSetPassword
  };
}
