<?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:----XnUyT6EuY+ka1qsDH8jwRtXUICEBBP+bTWXnsvtiUrKSArAhFoRJ1GUU5lA/qdy1zWNLoD2VTS6DjC8RJkzxZCtgkdPt4UcpKmNrt3cQekw4171M0AqJtVZO94KjBBYnko4JzIwFIKX/dhWvSl11W+AZh2Sv4NsKVlhAqC+4eNv/ZAyEIfUxJLQfa15SRfhPRMoLVC/nLQxoDZsCc0NK1SjLeijsF+Ic9OzqhEJ0cp1F2voTTtjOryvGo1PzDcfQ62Y4C6pkOeMwpUocVcToMURTe4i7jBoMK+VocbO683eMJK+r280oegSpyD94DjMntacdpz+9OrAW5iXUOeBXp53crf2GtJ97y/gj1TtHrnyqtV/bozkx3i9lQIstlQtfetN7q2dqTiB4Nr2vDG3GlL/dwpXqI0ZFmgfg4EqwMs9M3HxLuNubzSMgB1E1kp6+XrqsQ4wbzGo15byRv8IqsHh+FlF/nru7Ei4jW0TYXoPgo1MegQywzOzYUiNIVDKUImzZGf8T0rK8Fj6YVbL3b2yvowjbs1lGCRVTdrlY++7iC/LATQNIztP71Mq0H24TQB9H8Z6s2CypChCnrOH/83I0MXM4VZIwi2wG3OooOYPtu5EE6U4eE/Q9S7zjsfm0tKCuqBd2Z5s2iOEtXswUqYugigk/gRShwlmyCEFfwFc=----ATTACHMENT:----MzA3OTgwNTYxODYxNDM5OSA2OTE0MjAxMDg3NDUyMjE2IDY2MjI2NjQzMzMwNjIwNzM=