<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Article;
//use App\Services\TomTool\Http;
//use voku\helper\AntiXSS;

class CronController
{
    
    private $sUserName;
    private $sProjectName;
    
    public function index()
    {
        
        $h = date("H");
        $i = date("i");
        $s = date("s");
        
        //test
        $i = 7;
        
        
        $aConditions = Article::select('cron_condition')
            ->where('status', 1)
            ->distinct()
            ->get()
            ->toArray();

        foreach ($aConditions as $row) {
            
            $sCondition = $row['cron_condition'];
            
            if (eval("return $sCondition;")) {
                
                $aArticle = Article::where("cron_condition", $sCondition)->where("status", 1)->get()->toArray();
                
                $this->run($aArticle);
                
            }
            
        }

    }
    
    private function run($aArticle)
    {
        foreach ($aArticle as $row) {
            $this->sUserName = $row["user_name"];
            $this->sProjectName = $row["project_name"];
            
            list($sClass, $sFunc) = explode('#', $row['mod']);
            
            $sClass = "App\\Services\\Github\\File\\".$sClass;
            
            if (method_exists($sClass, $sFunc)) {
                $oInstans = new $sClass();
                $sReadMe = $oInstans->$sFunc($row);
//                var_dump($sReadMe);
            } else {
                // 处理方法不存在的情况（可选）
//                $this->tgMessage("Method $sClass does not exist.");
            }
            
            // 目录
            $sBaseDir = env("BASE_DIR");
            $sUserProjectDir = $sBaseDir."github/".$this->sUserName."-".$this->sProjectName;
            $sGitShDir = $sBaseDir."github";
            
            // 没有文件夹，创建一个
            if (!is_dir($sUserProjectDir)) {
                mkdir($sUserProjectDir, 0755, true); // 0755 是权限，true 表示递归创建目录
            }
            
            // 没有仓库，创建一个
            if (!is_dir($sUserProjectDir . "/.git")) {
                
                $sGithubProjectUrl = env("github_url_base").":".$this->sUserName."/".$this->sProjectName.".git";
                
                $output = shell_exec("sh " . $sGitShDir . "/init.sh " . escapeshellarg($sUserProjectDir) . " " . escapeshellarg($sGithubProjectUrl) . " " . escapeshellarg($this->sUserName));
                
                echo "Output from init.sh:\n$output\n";
                
                $output = shell_exec("git config --global --add safe.directory $sUserProjectDir 2>&1");
//                
//                echo "<br>Output from --add safa.directory:\n$output\n";
            }
            
            // 写入内容
            file_put_contents($sUserProjectDir."/README.md", $this->formatstr($sReadMe));
            file_put_contents($sUserProjectDir."/version.text", time());
            
            // 提交
            $output = shell_exec("sh ".$sGitShDir."/push.sh " . escapeshellarg($sUserProjectDir));
            echo "Output from push.sh:\n$output\n";
            
        }
    }
    
    private function tgMessage($sMsg)
    {
        if (env("is_loc") == true) {
            echo $sMsg;
        } else {
            echo 11;
        }
    }
    
    private function formatstr($str)
    {
        $str = substr($str, 1, -1);
        return $str;
    }
    
}
