package com.hepl.tunefortwo.config.swagger;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.stream.Collectors;

import org.springdoc.core.properties.SwaggerUiConfigParameters;
import org.springdoc.core.properties.SwaggerUiConfigProperties;
import org.springdoc.core.properties.SwaggerUiOAuthProperties;
import org.springdoc.core.providers.ObjectMapperProvider;
import org.springdoc.webmvc.ui.SwaggerIndexPageTransformer;
import org.springdoc.webmvc.ui.SwaggerWelcomeCommon;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.resource.ResourceTransformerChain;
import org.springframework.web.servlet.resource.TransformedResource;

import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class SwaggerBlockTransform extends SwaggerIndexPageTransformer {

    public SwaggerBlockTransform(SwaggerUiConfigProperties swaggerUiConfig,
            SwaggerUiOAuthProperties swaggerUiOAuthProperties, SwaggerUiConfigParameters swaggerUiConfigParameters,
            SwaggerWelcomeCommon swaggerWelcomeCommon, ObjectMapperProvider objectMapperProvider) {
        super(swaggerUiConfig, swaggerUiOAuthProperties, swaggerUiConfigParameters, swaggerWelcomeCommon,
                objectMapperProvider);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain)
            throws IOException {
        log.info("Setting swagger transform");
        if (resource.toString().contains("index.html")) {
            final InputStream is = resource.getInputStream();
            final InputStreamReader isr = new InputStreamReader(is);
            try (BufferedReader br = new BufferedReader(isr)) {
                String html = br.lines().collect(Collectors.joining());
                html = html.replace("<title>Swagger UI</title>", "<title>Tune for Two </title>");
                html = html
                        .replace(
                                "<link rel=\"icon\" type=\"image/png\" href=\"./favicon-32x32.png\" sizes=\"32x32\" />",
                                "<link rel=\"icon\" type=\"image/png\" href=\"https://testing_demo.cavinkare.in/shortner/SqOLV\" sizes=\"32x32\" />");
                html = html
                        .replace(
                                "<link rel=\"icon\" type=\"image/png\" href=\"./favicon-16x16.png\" sizes=\"16x16\" />",
                                "<link rel=\"icon\" type=\"image/png\" href=\"https://testing_demo.cavinkare.in/shortner/SqOLV\" sizes=\"16x16\" />");

                return new TransformedResource(resource, html.getBytes());
            } // AutoCloseable br > isr > is
        } else if (resource.toString().contains("swagger-ui.css")) {
            final InputStream is = resource.getInputStream();
            final InputStreamReader isr = new InputStreamReader(is);
            try (BufferedReader br = new BufferedReader(isr)) {
                String css = br.lines().collect(Collectors.joining());
                final byte[] transformedContent = css.replace("1b1b1b", "eff6f4").getBytes();

                return new TransformedResource(resource, transformedContent);
            }
        } else if (resource.toString().contains("index.css")) {
            final InputStream is = resource.getInputStream();
            final InputStreamReader isr = new InputStreamReader(is);
            try (BufferedReader br = new BufferedReader(isr)) {
                String css = br.lines().collect(Collectors.joining());
                css = css
                        + ".topbar-wrapper img {content: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHIAAABrCAYAAACrBNYuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAoDSURBVHgB7Z1fVttYEsa/KwPBNnPGWUFfz9s8hVlBxAoCK8CsYOAtgZyDcg7Q8wZZAc4KmqwAZwVNNtBWVtD0dIxDB+t2lSQHI8uyLNuyJN/fOfcY/5GM/anqVtUtyYBGo9FoNJowBPKHSUP6Y5AbGrZ/u3TkUUimRmPTvzX98cJ/zqbRovHBv9XkDEnjgkabhvIH/92AJrdYeBSTxy8YdsWanCDx1Dp/p7EPTW5p4ql1HkOTW5rQYhaGa2gxCwGnKoNzJg8Tmlxi4qmQLGwNBaCE5cKmUYdXTGBYxHvowkEukfBSkcG0JPdWuWwWydzS+DcerXId2ipzi4nhuVKTUca5y0H3ykMixxgoLtuILsnZgfsmckyRhWQ46ZcjnrsN3N9Ejim6kOxe4xbK/4kcU3QhmV2Ez5cycL+OHLMMQrKI24HHJIaFzHXkugxCMi8D962Q13yBJpM0EJ4nSjxNOwpRQF8Wi6wN3F6HPG8j55WdZROSm7NkyPPvkXOWRcg+ZshjNo0r5JxlEzKMdxiu8uSOFRSPftNyHNilNqHJFBJeSY6L4S08jVqV/xp74H4TmkwhMdwl10K0kE1oMgO7ULbAsJywhXAhf4VuUs4UJoY74oJCbmNYyEI0WoWRx6iVLYqTejnmdbcxHysEeROSXek5NLlm1HwYHOxyeZHYxLBr1SyY4Hw3anAJrj8PmtBCZgqJ6MCm35tqBrYzoYXMFE2Md6UyZDsTWsjMIDHeEuWIbU1oITNDE9FCNiK2NaGFzAzBJuJg0h+FCS1kJjARbY3mhNsXmiwvY5kRz3GFpoXZI/3B+1/KCy/NA161T+pWGYn4FmnCK6gHo+EGNFNzjdFCXsbYvoZ4Qo4rNrDAEprETCtkcB9yxGva/uBivAlP2DaGrbOwKyfzJkrIdsx97CM6VTHhWVxQpLALR+hifUKi5kgecSxkUJBfQp6XGG2p+wnfUxOAC+BRQlox92NivHsNI2zu1N0FCQiziMERVZ4bta9rxMcMec/c978uAl5TVBgfUcZ1d/0g5jLm6/dHvJ8mAVEluiRiMg14Ndxx27SRLH/VhGBhvJD9KFZidhwjeSFCE0IwqR8nZgPTc4zpAyxNCOOi1+C4RrJzHfmgOR+z71xfMGLRhCXncS20X62Jgp9nKxw3H7eQYfLyKwMmJksdwuDVjMG+Vj5AJOIHSnvQpxrMBAuTW+WsxiWKSueN3Eb6WEhfxDaKuvrRPZSN7lFd/flWmkgfC1rE2UFCtmlcYzGYSBYATTJSXYdU+7LWfS0lEpL83A+l+JRtc0FW2aKxBe9nk+bBe3//NlLg7kjud6uijZJodw/JQA7lMSYkkZB85DhKmPz3ihITv+mMsOEVAPgL/4TZ8BHepcw4bUnlzK2vNE0JiHPyAZ8dNg7OI4Sw7t7IiVZaJko/XAHpTQzDvb4b+5/PtIMXD0Jt/ePEbmGxmPCEfYXJaq98ELTgFR5SEW+Qb0f1Xx2FPypnbZPvK0vW7r+La8XFh56ql/9n23H2E6uLri8g2e8um7BS+CQMZVVIPJ4rfatsYbG08Pg/mP7o/6Jdf9jwxOJbziuvsOBzJlkwBXeachGWfdu15I56EP2zq13LdOdPQ1xjTW2VrWFxIy1yyAJ9AcsD1scRLLmCy4xYZe64e1v/3XBgP7tTW+LC/nFQ3R3KC/ped8sdVefHO2/qTdLhZfm0HXoVy5FzJAlk8eTLIrKAIKHY/MsBscpndpPe8N3Giu4DTYKhxDslsNldf1qQFwauyMpqXzfoOTIo15jUo+UGGWmRbGkKohG0QM3s6b79l4UVpxl0mWyteFAflBC1KGtk8lJrXUo6R7JpQLwE57NK7bnebwT6EmYZhqa0FryihB0lIqOFzDAlx4/CI+ZGTU6gVETGed1M5kiqTmxSQnqpHOzETWA1s2Vq1/rXkdw1hLh2DCF767oTe1FMJSQXe3sQTTLrW2dFbW1Yts4lF0Ri13pPFXq3bMflrtXwspEmPZKvfkSIyM93uDKkSY1EQjorXlugctT7oIgc+HBxl+bN4+5i1iqXkkRCGg9eXVUIvBh8/M/X0uTARxkU9BhUidClPe/AToHEc6RbH1TqWDjqokdregaLSu6WCsA68PHhReNSSitDU+WRXFinuXKbzJotU0IHPi7cf/ONUjFREu7Jtc/oO+F1RsyRqdIPrv+pVWUhpogcBE3awpBH7qu0AExxgiMgH6jYPW8RmakLAuxCabnrIJYl0ocThjjneYOPWhQUJdQB+TopFGpuvJACqS1j9eeLp4+qFnrYK2JZrx9D0J8tWkfcwpxJZfWDXWoJ4pgDIe40oA8meH2NFkzdVKWI1lk++c1yvHZNM0l746SkIqRbPGBX46iDfkrirq856gM/3qnkq5ubD0xOtcYdgJVVxfGAzdH8vE+xmPu16NilUmqyS260GVwcVUrUxAJ7FFgQSp1MYUDS//gTLeTWKmf2zqjXu6s8glZ5IHi1B9+qXm8Tfa7Q9UK/I26LO+IoNuBpZW4Xk5i7kOxS3T9W8eTDeu19bneevXGWXs75o61QeF6gBHcl/ovD7ZGGuonaTgm33/S2x5GogVtDiXO/mfiPys/2Rdh2HABShWtn3tHI3IUUQrynLwkVq20PPq5WcE5RHehLGWkBbj5WwX+Vf6Yw7edj9Q5Xg22Dk7K+jttv392I8uZhTe2RUdlx0gO3LZR7Y1fVfzb86FxZstV9EG06MI7pf22O+r/SqHAtxLE9RrDkbk/tvbDXsIj3FbIAwQ28+AyFW3LDL+nWprl1a5pI9+6wbtMHV+Wz0V1pQbgjnF1vcBu3bZTqyo6jdqo/23NzneNIvWenH8HCLSBgZC/KX2yJrojioHLa3nRb6ldV3avjYtoo8IZd6yTRMrtU+n9qwW16GfntydQvvOu6tgfxAY5jRxUQHIgG3wo4r74eSVKW8jEqPnSO5EeyAI4A95AYZfOeKVre/vqap2py3QZ+oie+ULATXnlS6hNNE2a37B5EB/2HBZ/MROZtPFtsg3bqQvrzkTX+hWQxfIoC5WIGN0qv4bxLLlHN4MJ+HNhwkOO695IX7JC1kZWqkXPl+houaG7dpehzn9xprefgU6nkBmsmzZ/vqoEYIG0yeylsLh5Q1aBNc2gT/kUYOm8pF1NcpFcKU7BGQva8d2mur+IgTrDTTyWc7xT0CNEgERtugUOJg+rJbxdYMJntayWpPtLX1/j/QCKtHNSc3ugAKS6ra9685ijxfJKCNk8F1dN2Y31VPef5unLSfl45XbyITGZPGRg8T1AodUPuS/JJLa4bo/IXpiRJ5JplMn/uB7tT4XgXPeIzlGaVk5GQV5TOvFrvqOfT5KVZIfO/el49cXOzOeRnPyJXiQL8NMTSnvtBUfBFj6o01bVs5IEajUaj0Wg0mgj+BkfZO1Hmx5/rAAAAAElFTkSuQmCC\");}";
                return new TransformedResource(resource, css.getBytes());
            }
        }

        return super.transform(request, resource, transformerChain);
    }

}