from fastapi import Response, FileResponse
from fastapi.responses import PlainTextResponse, JSONResponse, FileResponse, Response

import os 

#def pwa(s: str, content_type: str) -> Response:
#    return Response(content=s, media_type=content_type)


#pwa/calc.oba 

# /pwa/<app.oba>/manifest.json 
# /pwa/<app.oba>/pwa.js
# /pwa/<app.oba>/pwa_sw.js 
# /<app.oba>/filePath 
# cacheFile = '/app.oba/file'





# /pwa_sw.js    (service-worker.js)



def pwa(path_tokens, s ):
    #replace to add its value 
    head = '<link rel="manifest" href="manifest.json"></head>)'
    body = '<script src="pwa.js"></script></body>'
    ZFS_DIR = ''
    
    filePath = ZFS_DIR+'/'.join(path_tokens)
    appName = path_tokens[-2]
    print('148:', filePath )
        #if has pwa than return defult it 

    #    s.replace('</head>', head)
    #s.replace('</body>', body)


    if   path_tokens[-1].endswith('.oba'):
        return Response(content='hell', media_type='text/html')
    
    elif path_tokens[-1]== 'manifest.json': 
        # /manifest.json
        manifest={
            "short_name": "App 1",
            "name": "Application One",
            "start_url": "/app1/",
            "display": "standalone",
            "background_color": "#ffffff",
            "theme_color": "#007BFF",
            "icons": [
                {
                    "src": "icon-192x192.png",
                    "sizes": "192x192",
                    "type": "image/png"
                },
                {
                    "src": "icon-512x512.png",
                    "sizes": "512x512",
                    "type": "image/png"
                }
            ]
        }
        
        manifest["short_name"]= appName
        manifest["name"      ]= appName
        manifest["start_url":]=  f"/{appName}/"
        #return Response(content=s, media_type='application/json')
        return manifest 
        
            
    elif path_tokens == 'pwa.js': 
        # /pwa.js 
        pwa_js = """
            if ('serviceWorker' in navigator) {
                window.addEventListener('load', () => {
                    navigator.serviceWorker.register('pwa_sw.js')
                    .then(registration => {
                        console.log('Service Worker registered with scope:', registration.scope);
                    })
                    .catch(error => {
                        console.error('Service Worker registration failed:', error);
                    });
                });
            }
        """
        return Response(content=pwa_js, media_type='application/javascript')
            
            
    elif path_tokens == 'pwa_sw.js': 
        pwa_sw = """
            self.addEventListener('install', (event) => {
                event.waitUntil(
                    
                    //caches.open('app1-cache').then((cache) => {    
                        //return cache.addAll(['/', 'index.html', 'styles.css', 'script.js']);
                    caches.open('<appName>-cache').then((cache) => {
                    
                        return cache.addAll(['<cacheFiles>']);
                    })
                );
            });
            self.addEventListener('fetch', (event) => {
                event.respondWith(
                    caches.match(event.request).then((response) => {
                        return response || fetch(event.request);
                    })
                );
            });
         """
        return Response(content=pwa_sw, media_type='application/javascript')


            
            
            
            

    else:
        return JSONResponse(content={'ERROR': 'File not found'}, status_code=404)

        #mkdir 