'use client';

import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import FormProvider from '@/components/forms/FormProvider';
import RHFTextField from '@/components/forms/RHFTextField';
import RHFUploadImage from '@/components/forms/RHFUploadImage';
import PrimaryButton from '@/components/button/PrimaryButton';
import {
	CreateAdminInput,
	CreateAdminSchema,
	defaultAdminValues,
} from '@/lib/modules/auth/auth.validation';

import {
	UpdateAdminInput,
	UpdateAdminSchema,
} from '@/lib/modules/admin/admin.validation';

interface Props {
	isEditing?: boolean;
	admin?: any;
	onSubmit: (data: FormData) => Promise<void>;
}

const AdminAccountForm = ({ isEditing = false, onSubmit }: Props) => {
	// const { data, isLoading } = useGetAllTrustedClientsQuery();
	// const [create] = useCreateTrustedClientMutation();
	// const [update] = useUpdateTrustedClientMutation();

	// Pick the correct schema at runtime
	const schema = isEditing ? UpdateAdminSchema : CreateAdminSchema;

	// Use union type for form inputs
	const methods = useForm<CreateAdminInput | UpdateAdminInput>({
		defaultValues: defaultAdminValues,
		resolver: zodResolver(schema) as any, // safe cast
	});

	const handleSubmit = async (data: any) => {
		const formData = new FormData();

		formData.append('fullName', data.fullName);
		formData.append('email', data.email);

		// password is optional in UpdateAdminInput
		if ('password' in data && data.password) {
			formData.append('password', data.password);
		}

		if (data.profileImage instanceof File) {
			formData.append('profileImage', data.profileImage);
		}

		await onSubmit(formData);
	};

	return (
		<FormProvider
			methods={methods}
			onSubmit={methods.handleSubmit(handleSubmit)}
		>
			<div className="space-y-6">
				<RHFUploadImage name="profileImage" label="Profile Image" />
				<RHFTextField name="fullName" label="Full Name" isRequired />
				<RHFTextField name="email" label="Email" isRequired />
				{!isEditing && (
					<RHFTextField
						name="password"
						label="Password"
						type="password"
						isRequired
					/>
				)}
				<PrimaryButton title={isEditing ? 'Update' : 'Create'} />
			</div>
		</FormProvider>
	);
};

export default AdminAccountForm;
