import { PostData } from "@lib/fetch";

const ALLOWED_IMAGE_TYPES = ["image/jpeg", "image/jpg", "image/png", "image/gif", "image/webp"];
const MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024;

export const validateBannerImageFile = (file: File | null | undefined) => {
	if (!file) return null;
	if (!ALLOWED_IMAGE_TYPES.includes((file.type || "").toLowerCase())) {
		return "Invalid file type. Allowed: JPG, PNG, GIF, WEBP.";
	}
	if (file.size > MAX_FILE_SIZE_BYTES) {
		return "File too large. Maximum size is 5 MB.";
	}
	return null;
};

export const isValidImageUrl = (url: string) =>
	/^https?:\/\/.+\.(jpg|jpeg|png|gif|webp)(\?.*)?$/i.test(url || "");

export const uploadBannerImage = async (encodedContext: string, file: File) => {
	const validationError = validateBannerImageFile(file);
	if (validationError) {
		return { status: "failure", message: validationError };
	}

	const formData = new FormData();
	formData.append("file", file);

	const { response, status }: any = await PostData(
		`/api/merchandising/uploadBannerImage?context=${encodedContext}`,
		formData,
		true
	);

	if (status === 200 && response?.status === "success" && response?.data?.fileUrl) {
		return {
			status: "success",
			fileUrl: response.data.fileUrl,
			message: response.message,
		};
	}

	return {
		status: "failure",
		message: response?.message || "Failed to upload banner image",
	};
};
