<?php

namespace App\Console\Commands\Update;

use App\Models\Blog\Blog;
use App\Models\Com\UpdateLog;
use App\Models\News\News;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

/**
 * 4.0,5.0升级到6.0,内容同步
 * Class ProjectImport
 * @package App\Console\Commands
 * @author Akun
 * @date 2023/10/9 15:04
 */
class Temp extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'project_update_temp';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '执行项目升级任务';


    public function handle()
    {
        $this->start_update();
    }

    protected function start_update()
    {
        $list = UpdateLog::where('project_id', '!=', 437)->where('api_type', 'news')->get();

        foreach ($list as $task) {
            $project_id = $task->project_id;
            $api_type = $task->api_type;
            $api_url_arr = explode('?', $task->api_url);
            $api_url = $api_url_arr[0];

            $page_size = 20;

            echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', task_type: ' . $api_type . ', update start' . PHP_EOL;


            //设置数据库
            $project = ProjectServer::useProject($project_id);
            if ($project) {
                //新闻或博客
                $url = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => 1, 'pagesize' => 0]);
                $data = curl_c($url);
                if (isset($data['code']) && $data['code'] == 200) {
                    $count = $data['data']['count'] ?? 0;

                    $total_page = ceil($count / $page_size);
                    for ($page = 1; $page <= $total_page; $page++) {
                        $url_page = $api_url . '?' . http_build_query(['w' => $api_type, 'page' => $page, 'pagesize' => $page_size]);
                        $data_page = curl_c($url_page);
                        if (isset($data_page['code']) && $data_page['code'] == 200) {
                            $items = $data_page['data']['data'] ?? [];

                            if ($api_type == 'news') {
                                $model = new News();
                            } else {
                                $model = new Blog();
                            }

                            foreach ($items as $item) {

                                if ($item['ttile'] ?? '') {
                                    $news = $model->read(['name' => $item['ttile']], 'id');
                                    if ($news) {
                                        try {
                                            if (is_array($item['images'])) {
                                                $image = $item['images'][0] ?? '';
                                            } else {
                                                $image = $item['images'] ?? '';
                                            }
                                            if (strpos($image, '//') === 0) {
                                                $image = 'https:' . $image;
                                            }
                                            $model->edit(['image' => $image], ['id' => $news['id']]);
                                        } catch (\Exception $e) {
                                            echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', error: ' . $e->getMessage() . PHP_EOL;
                                            continue;
                                        }
                                    }
                                }
                            }
                        }
                    }
                } else {
                    continue;
                }
            }
            //关闭数据库
            DB::disconnect('custom_mysql');

            echo 'date:' . date('Y-m-d H:i:s') . ', task_id: ' . $task->id . ', task_type: ' . $api_type . ', update end ' . PHP_EOL;
        }
    }
}