import { useState, useEffect } from "react";

// Helper functions for validation
const isValidEmail = (email: string) => {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

const isValidHostname = (hostname: string) => {
    const hostnameRegex = /^(?!:\/\/)([a-zA-Z0-9-_]{1,63}\.?)+[a-zA-Z]{2,6}$/;
    return hostnameRegex.test(hostname);
}

// Custom hook for input validation
const useValidation = (initialValue: string, validateFn: (value: string) => boolean, errorMessage: string) => {
    const [value, setValue] = useState(initialValue);
    const [error, setError] = useState("");

    const handleChange = (newValue: string) => {
        setValue(newValue);
        if (newValue.trim() === "") {
            setError("This field cannot be empty.");
        } else if (!validateFn(newValue.trim())) {
            setError(errorMessage);
        } else {
            setError("");
        }
    };

    useEffect(() => {
        handleChange(initialValue);
    }, [initialValue]);

    return { value, error, handleChange };
};

export { useValidation, isValidEmail, isValidHostname };
