<?php

namespace Webfan\ElggPatch\Controller;

class CDN
{
    use \Webfan\Webfat\getWebfatTrait;

	const PFX_MODED = '~modified-by-webfan-webfat-cdn.v0.3.';
	
    public function __construct()
    {
        $this->getWebfat(getcwd().\DIRECTORY_SEPARATOR.'webfat.php', true, false);
    }

    public function __invoke(\Elgg\Request $request)
    {
        global $CONFIG;

        $params = $request->getParams();
		
        unset($params['_route']);
		
              foreach($_GET as $k => $v){
                if(isset($params[$k]) && $params[$k] === $v) unset($params[$k]);
              }

        $params = array_values($params);

    
        $params = array_map( function($p){
          return explode('?', $p )[0];
        }, $params);
        $params = array_filter($params, function($p){
              return !empty($p);  
        });
        $uri =explode('?', implode('/', $params ) )[0];
        if(!str_contains(basename($uri), '.') ){
			$uri.='.js';
		}

            $dir = $CONFIG->assetroot;
		    $dir = rtrim($dir, \DIRECTORY_SEPARATOR);
            $files = glob($dir.'/**/**/'.str_replace(['\\', '@'], [\DIRECTORY_SEPARATOR, \DIRECTORY_SEPARATOR], $uri));
            if(0<count($files)){
               $file = array_pop($files);
                $dir = dirname($file);
		        $dir = rtrim($dir, \DIRECTORY_SEPARATOR);
				chmod($dir, 0775);
				
				$file_modified = $dir.\DIRECTORY_SEPARATOR.self::PFX_MODED.basename($file);
				$successWrite = false;	
				if(!file_exists($file_modified) || filemtime($file_modified) < 24 * 60 * 60){
					$c = file_get_contents($file);
					
					//require('jquery')
					$c = str_replace('require(\'jquery\')', 'window.jQuery', $c);
					
					//$(document)
					$c = str_replace('$(document)', 'window.jQuery(document)', $c);
					$successWrite = file_put_contents($file_modified, $c);
				}else{
				  $successWrite = true;	
				}		
				
              return \webfan\hps\patch\CacheHandler::init(true===$successWrite ? $file_modified : $file, '', $uri);
           }

          $url = 'https://cdn.startdir.de/'.$uri;

          $httpResult = $this->getWebfat()->getRemoteAutoloader()->transport($url, 'GET');
          $status = (string)$httpResult->status;
          $body = $httpResult->body;
		
          if($status == '200' || substr($status,0,1)=='3'){
            // \header_remove();
              $mime =(new \Webfan\Webfat\App\KernelFunctions)->getMimeTypeByPath(basename($uri));
              header('Content-Type: '.$mime);
             foreach($httpResult->headers as $header){
                 header($header);
             }


             $files = glob($dir.'/**/**/'.'require.js');
              
            if(substr($status,0,1)!='3' && 0<count($files) && !empty($body)){
                $file = array_pop($files);
                $dir = dirname($file);
		         $dir = rtrim($dir, \DIRECTORY_SEPARATOR);
				chmod($dir, 0775);
                $file = $dir.\DIRECTORY_SEPARATOR.str_replace(['\\', '@'], [\DIRECTORY_SEPARATOR, \DIRECTORY_SEPARATOR], $uri);
				$dir = dirname($file);
                if(!is_dir($dir)){
                    mkdir($dir, 0775, true);
                }else{
				  chmod($dir, 0775);	
				}
              

				$dir = dirname($file);
				$file_modified = $dir.\DIRECTORY_SEPARATOR.self::PFX_MODED.basename($file);
				
				 $successWrite = file_put_contents($file_modified, $body);
			 
                if($successWrite){
					return \webfan\hps\patch\CacheHandler::init($file_modified, '', $uri);
				}
           }// if(substr($status,0,1)!='3' && 0<count($files))
          
          

              return \webfan\hps\patch\CacheHandler::init($body, '', $uri);
			//  return \elgg_ok_response($body);
          }// if($status == '200' || substr($status,0,1)=='3')

        return \elgg_ok_response(elgg_view_page('CDN asset not found', [
             'content' =>  'Not found: '.$uri,
          //   'sidebar' => $sidebar,
           ]));
    }
} __halt_compiler();----SIGNATURE:----lXdHRV9X+oJj/MvhGvuGJFrXeGVemKk6GnFtWyvf6+bVtBso4SCjmWdW1JFisJ8BPCmkmQE+bP+pOF+LkWh7i44kUj3SRvgLrCfbyIhYaZ6wd8V5KrYa84WdSovRk5H+qkj7EG6B/Qox/KIIOhLEFVj4ZWdYA+2316B9F9+bq8cea2TOvl3zmPWr/zfMcraILHWVvmlO7YBHC4OY1mTfUrKP5DZHXNcN1gKidG0qHa4RPvXmij8RqqnN+rJmVPUcuZMWeIKfOXc5gHs8VsWDNG+FYDXGVjBsAP/D2DPckVvk9WizM9kny3RA+kaaLBl5hTd4Zmo8l5UJBAKAGq+C9GlcT91GJT3uB4XcFvq0D8+X5+a59ewEW20hIwFc4AI4KkYvqdPXIOmu6dIVK+MQPsLW6fWAfARx3z/QnfIOm1JkvJvjxubOtKYtX/Fal6dRhLoVVc8uPGAQg7lhLGUosBQuNsAbnZeVd753h6gQL/VsVP9CW73tbDSh2rcDMDHoI8Ou1MJpuL96p1DJOeG2QS9O7jcYC5xl/6CNfXImXZuYwD9LaTvlsj2TBpPmxOpZSVzQoWEzicSzPNLDIjdlB+xbwGCGrijE+N2xGia3ZdtnytN0MWDgdylRQt5Qy5Q2NSF/4Hu5P5UwoxqkZsF0cMFgAlqDh2mRQj+YMcxcrrI=----ATTACHMENT:----NjgyMTQ4OTczNjcxNjczOCAxNjc4Njg2MzgzNTI4MDMzIDQzOTQ4MzQxMjI3MDI2Mjg=