<?php

namespace App\Console\Commands\Test;



use App\Helper\FormGlobalsoApi;
use App\Models\Domain\DomainInfo;
use App\Models\HomeCount\Count;
use App\Models\Inquiry\InquiryFormData;
use App\Models\Nav\BNav;
use App\Models\Nav\BNavGroup;
use App\Models\Project\OnlineCheck;
use App\Models\Project\Project;
use App\Models\Project\ProjectUpdateTdk;
use App\Models\SyncSubmitTask\SyncSubmitTask as SyncSubmitTaskModel;
use App\Models\WebSetting\Translate as TranslateModel;
use App\Models\WebSetting\WebLanguage;
use App\Services\ProjectServer;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

/**
 * Class Test
 * @package App\Console\Commands
 * @author zbj
 * @date 2023/4/25
 */
class Test extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'test';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * @return bool
     */
    public function handle()
    {

        $ids = '295,792,1788,968,1678,1408,1780,104,1720,160,1337,1382,1773,1787,1261,1872,185,1889,1823,1572,696,1632,1504,1042,1252,491,1867,1277,1712,1939,1577,499,1812,1852,235,732,388,1848,1880,1885,1920,826,1368,1535,1679,1584,1665,773,1841,1303,1442,13,1591,1894,2066,1887,1888,1817,1778,1673,1391,1751,1607,2010,1483,2062,2000,2019,2091,1602,1985,1514,1768,1703,1596,1955,1989,1900,1373,1779,1619,1824,404,1869,1891,1215,1589,1686,1322,1681,1378,1487,1431,1133,1415,1876,1911,1672,1992,1715,1929,1171,1997,1816,1842,2017,2107,1644,2104,2201,1468,2092,211,2097,1993,829,2124,1241';
        $ids = explode(',' ,$ids);
        foreach ($ids as $id){
            ProjectUpdateTdk::add_task($id);
        }
        exit;
        $date = '2024-05-16';
        $list = $this->getProjectList();
        foreach ($list as $item){
            ProjectServer::useProject($item['project_id']);
            //pv统计
            $pv_num = $this->pv_num($date);
            //ip统计
            $ip_num = $this->ip_num($date);

            echo $item['project_id'] . ',pv:' . $pv_num . ',ip:' . $ip_num . PHP_EOL;
        }
        exit;


        $i=0;
        while (true){
            $list = SyncSubmitTaskModel::where('project_id', 0)->limit(1000)->get();
            if(!$list){
                exit;
            }
            foreach ($list as $item){
                $project = Project::getProjectByDomain($item['data']['domain'] ?? '');
                $item->project_id = $project->id;
                $item->save();
            }
            echo $i . PHP_EOL;
            $i++;
        }

        exit;


        ProjectServer::useProject(3);
        $data = [
            'c' => 'c',
            'b' => 'a',
            'a' => 'b',
            'e' => 'e',
        ];
        $param = [
            'type'=>1,
            'project_id'=>3,
            'url'=>'/',
            'language_id'=>2,
            'alias'=>'zh',
        ];
        $param['data'] = json_encode($data,true);
        TranslateModel::insert($param);
        dd('end');
        $this->model->add($param);
        ProjectServer::useProject(1);
        $group =BNavGroup::where(['id' => 1])->first();
        $sort_list = json_decode($group->sort_list, true);
        $nav = new BNav();
        $map = [
            'project_id' => 1,
            'group_id' => 1
        ];
        $list = $nav->list($map, ['sort','id']);
        $ids = array_column($group, 'id');
        dd($list, $sort_list);
        $projects = Project::all();
        foreach ($projects as $project){
            echo "project " . $project->id;
            if(!ProjectServer::useProject($project->id)){
                echo '未配置数据库' . PHP_EOL;
                continue;
            }
            $test_domain = $project->deploy_build['test_domain'];
            $domainInfo = new DomainInfo();
            $info = $domainInfo->read(['id'=>$project->deploy_optimize['domain']]);
            if($info !== false){
                $test_domain = $info['domain'];
            }

            try {
                $list = Count::where('date', '2023-12-11')->where('project_id', $project->id)->get();
                foreach ($list as $v){
                    $arr = $this->inquiry([],$test_domain, $v['id'],$project->is_upgrade ?? 0);
                    $v->inquiry_num = $arr['inquiry_num'];
                    $v->country = $arr['country'];
                    $v->save();
                    echo $v['date'] . ':' . $v->pv_num .':'. $v->ip_num . PHP_EOL;
                }
            }catch (\Exception $e){
                echo '保存失败' . $e->getMessage() . PHP_EOL;
            }
        }
        echo "finish";
    }

    public function inquiry($arr,$domain,$project_id,$is_upgrade = 0){
        $inquiry_list = (new FormGlobalsoApi())->getInquiryAll($domain,$is_upgrade ?? 0);
        if($inquiry_list['status'] == 400){
            $arr['inquiry_num'] = 0;
            $countryArr = [];
        }else{
            $arr['inquiry_num'] = $inquiry_list['data']['count'];
            //询盘国家统计
            $countryArr = $inquiry_list['data']['country'];
        }
        //加上其他询盘
        $arr['inquiry_num'] += InquiryFormData::getCount();
        $countryData = InquiryFormData::getCountryCount();
        foreach ($countryData as $v1){
            if(isset($countryArr[$v1['country']])){
                $countryArr[$v1['country']] += $v1['count'];
            }else{
                $countryArr[$v1['country']] = $v1['count'];
            }
        }


        arsort($countryArr);
        $top20 = array_slice($countryArr, 0, 20, true);
        $arr['country'] = json_encode($top20);
        return $arr;
    }

    protected function getProjectList($type = 1){
        $ru_lang_id = WebLanguage::getIdByLang('ru');

        //推广项目
        $list = Project::with('domainInfo')
            ->leftJoin('gl_project_deploy_optimize as pdo', 'pdo.project_id', '=', 'gl_project.id')
            ->leftJoin('gl_project_online_check as poc', 'poc.project_id', '=', 'gl_project.id')
            ->where('pdo.domain', '>', 0)
            ->where('poc.qa_status', OnlineCheck::STATUS_ONLINE_TRUE)
            ->whereIn('gl_project.type', [Project::TYPE_TWO, Project::TYPE_FOUR])
            ->where('gl_project.is_upgrade', 0)   //非升级项目
            ->where('gl_project.main_lang_id', '<>', $ru_lang_id) //非俄语站
            ->where(function ($query) use ($type) {
                if($type == 1){
                    //1-3个月项目
                    $startTime = Carbon::now()->addMonths(-4)->toDateString();
                    $endTime = Carbon::now()->addMonths(-1)->toDateString();
                    $query->whereBetween('pdo.start_date', [$startTime,$endTime]);
                }elseif($type == 2){
                    //4-8个月项目
                    $startTime = Carbon::now()->addMonths(-9)->startOfDay()->toDateTimeString();
                    $endTime = Carbon::now()->addMonths(-4)->endOfDay()->toDateTimeString();
                    $query->whereBetween('pdo.start_date', [$startTime,$endTime]);
                }else{
                    //大于9个月项目
                    $startTime = Carbon::now()->addMonths(-9)->startOfDay()->toDateTimeString();
                    $query->where('pdo.start_date', '<', $startTime);
                }
            })->select(['pdo.project_id','gl_project.main_lang_id','gl_project.id'])
            ->orderBy('project_id')
            ->get();
        //其他地方在引流的域名
        $other = DB::connection('projects_mysql')->table('projects')->where('switch', 1)->pluck('domain')->toArray();
        $data = [];
        foreach ($list as $project) {
            $lang = WebLanguage::getLangById($project['main_lang_id']??1)['short'];
            if(empty($project->domainInfo['domain'])){
                continue;
            }
            //其他地方在引流就不再引流了
            if(in_array($project->domainInfo['domain'], $other)){
                continue;
            }
            $data[] = [
                'project_id' => $project['project_id'],
                'domain' => 'https://' . $project->domainInfo['domain'] . '/',
                'lang' => $lang
            ];
        }
        return $data;
    }
    /**
     * @name   :(统计pv)pv_num
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:40
     */
    public function pv_num($yesterday){
        $pv = DB::connection('custom_mysql')->table('gl_customer_visit_item')->where('updated_date', $yesterday)->count();
        return $pv;
    }

    /**
     * @name   :(统计ip)ip_num
     * @author :lyh
     * @method :post
     * @time   :2023/6/14 15:40
     */
    public function ip_num($yesterday)
    {
        $ip = DB::connection('custom_mysql')->table('gl_customer_visit')->where('updated_date', $yesterday)->count();
        return $ip;
    }
}