import { readPaths } from "keycloakify/bin/keycloakify/generateTheme/readStaticResourcesUsage";
import { same } from "evt/tools/inDepth/same";
import { expect, it, describe } from "vitest";

describe("Ensure it's able to extract used Keycloak resources", () => {
    const expectedPaths = {
        "resourcesCommonFilePaths": [
            "node_modules/patternfly/dist/css/patternfly.min.css",
            "node_modules/patternfly/dist/css/patternfly-additions.min.css",
            "lib/zocial/zocial.css",
            "node_modules/jquery/dist/jquery.min.js"
        ],
        "resourcesFilePaths": ["css/login.css"]
    };

    it("works with coding style n°1", () => {
        const paths = readPaths({
            "rawSourceFile": `
            const { isReady } = usePrepareTemplate({
                "doFetchDefaultThemeResources": doUseDefaultCss,
                "styles": [
                    \`\${url.resourcesCommonPath}/node_modules/patternfly/dist/css/patternfly.min.css\`,
                    \`\${
                        url.resourcesCommonPath
                    }/node_modules/patternfly/dist/css/patternfly-additions.min.css\`,
                    \`\${resourcesCommonPath }/lib/zocial/zocial.css\`,
                    \`\${url.resourcesPath}/css/login.css\`
                ],
                "htmlClassName": getClassName("kcHtmlClass"),
                "bodyClassName": undefined
            });

            const { prLoaded, remove } = headInsert({
                "type": "javascript",
                "src": \`\${kcContext.url.resourcesCommonPath}/node_modules/jquery/dist/jquery.min.js\`
            });

            `
        });

        expect(same(paths, expectedPaths)).toBe(true);
    });

    it("works with coding style n°2", () => {
        const paths = readPaths({
            "rawSourceFile": `

            const { isReady } = usePrepareTemplate({
                "doFetchDefaultThemeResources": doUseDefaultCss,
                "styles": [
                    url.resourcesCommonPath + "/node_modules/patternfly/dist/css/patternfly.min.css",
                    url.resourcesCommonPath + '/node_modules/patternfly/dist/css/patternfly-additions.min.css',
                    url.resourcesCommonPath 
                        + "/lib/zocial/zocial.css",
                    url.resourcesPath + 
                        '/css/login.css'
                ],
                "htmlClassName": getClassName("kcHtmlClass"),
                "bodyClassName": undefined
            });

            const { prLoaded, remove } = headInsert({
                "type": "javascript",
                "src": kcContext.url.resourcesCommonPath + "/node_modules/jquery/dist/jquery.min.js\"
            });


             `
        });

        console.log(paths);
        console.log(expectedPaths);

        expect(same(paths, expectedPaths)).toBe(true);
    });

    it("works with coding style n°3", () => {
        const paths = readPaths({
            "rawSourceFile": `

            const { isReady } = usePrepareTemplate({
                "doFetchDefaultThemeResources": doUseDefaultCss,
                "styles": [
                    path.join(resourcesCommonPath,"/node_modules/patternfly/dist/css/patternfly.min.css"),
                    path.join(url.resourcesCommonPath, '/node_modules/patternfly/dist/css/patternfly-additions.min.css'),
                    path.join(url.resourcesCommonPath, 
                        "/lib/zocial/zocial.css"),
                    pathJoin(
                        url.resourcesPath,
                        'css/login.css'
                    )
                ],
                "htmlClassName": getClassName("kcHtmlClass"),
                "bodyClassName": undefined
            });

            const { prLoaded, remove } = headInsert({
                "type": "javascript",
                "src": path.join(kcContext.url.resourcesCommonPath, "/node_modules/jquery/dist/jquery.min.js")
            });


             `
        });

        expect(same(paths, expectedPaths)).toBe(true);
    });
});