import fetch from "node-fetch";
import PrintervalVariants from "./index.js";

interface Variant {
    id: number;
    slug: string;
    values: Array<{ id: number }>;
}

interface ProductVariant {
    id: number;
    sku: string,
    variants: number[];
    price: number;
    high_price: number;
}

interface Galleries {
    [key: number]: string[];
}

interface FetchDataResult {
    variants: Variant[];
    productVariants: ProductVariant[];
    galleries: Galleries;
}

async function fetchData(productId: number): Promise<FetchDataResult> {
    const variantResponse = await fetch(`https://us-variant.printerval.com/v2/variant/${productId}?ignore_localization=1`);
    const variantDataJson = await variantResponse.json() as { result: { variants: Variant[], productVariants: ProductVariant[] } };

    const variants = variantDataJson.result.variants;
    const productVariants = variantDataJson.result.productVariants;

    const galleryResponse = await fetch(`https://us-variant.printerval.com/gallery/${productId}?ignore_localization=1`);
    const galleriesDataJson = await galleryResponse.json() as { result: Galleries };
    const galleries = galleriesDataJson.result;

    return { variants, productVariants, galleries };
}

async function getDetails(productId: number): Promise<void> {
    const { variants, productVariants, galleries } = await fetchData(productId);

    const printervalVariants = PrintervalVariants.init({
        variants: variants,
        productVariants: productVariants,
        galleries: galleries
    });
    const retVal = printervalVariants.getProductSkuDetails(159658972);
    console.log(JSON.stringify(retVal.variants));
}

getDetails(1000400032).then(() => {});