<?php

namespace App\Http\Controllers;

use App\Models\Upgrade;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

class UpgradeController extends Controller
{
    /**
     * 系统升级接口
     * @param Request $request
     * @return array
     */
    public function index(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'os' => ['required', Rule::in('ios', 'android')],
            'version_code' => 'required',
        ]);
        if ($validator->fails()) {
            return jsonError($validator->errors()->first());
        }
        $upgradeInfo = json_decode(config('customer.app_upgrade_info'), true);
        $info = [];
        if ($upgradeInfo) {
            $version = isset($upgradeInfo[$request['os']]) ? $upgradeInfo[$request['os']]['version'] : '1.0.0';
            $versionCode = isset($upgradeInfo[$request['os']]) ? $upgradeInfo[$request['os']]['version_code'] : '1';
            $content = isset($upgradeInfo[$request['os']]) ? $upgradeInfo[$request['os']]['content'] : '系统升级';
            $title = isset($upgradeInfo[$request['os']]) ? $upgradeInfo[$request['os']]['title'] : '升级提示';
            $clientVersion = intval($request['version_code']);
            $url = isset($upgradeInfo[$request['os']]) ? $upgradeInfo[$request['os']]['url'] : '';
            if ($clientVersion < $versionCode) {
                $info['upgrade'] = 1;
            } else {
                $info['upgrade'] = 0;
            }
            $addDate = '2019-09-03 18:00:00';
            $now = Carbon::now()->toDateTimeString();
            if($request['os'] == 'android' && $clientVersion != $versionCode && $now < $addDate){
                $info['upgrade'] = 1;
            }
            $info['url'] = $url;
            $info['version'] = $version;
            $info['title'] = $title;
            $info['content'] = $content;
        } else {
            $info['upgrade'] = 0;
            $info['url'] = '';
            $info['version'] = '';
            $info['title'] = '';
            $info['content'] = '';
            Log::error('未设置升级配置信息');
        }
        return $this->jsonSuccess($info);
    }
    /**
     * 系统升级接口
     * @param Request $request
     * @return array
     */
    public function upgrade(Request $request)
    {
        Log::debug('系统升级接口'.json_encode($request->all()));
        $validator = Validator::make($request->all(), [
            'os' => ['required', Rule::in('ios', 'android')],
            'version_code' => 'required',
        ]);
        if ($validator->fails()) {
            return jsonError($validator->errors()->first());
        }

        $upgradeInfo = Upgrade::where(['os'=>$request['os']])->orderBy('id','desc')->first();
        $info = [];
        if ($upgradeInfo) {
            $version = isset($upgradeInfo->version) ? $upgradeInfo->version : '1.0.0';
            $versionCode = isset($upgradeInfo->version_code) ? $upgradeInfo->version_code : '1';
            $content = isset($upgradeInfo->content) ? $upgradeInfo->content : '系统升级';
            $title = isset($upgradeInfo->title) ? $upgradeInfo->title : '升级提示';
            $clientVersion = intval($request['version_code']);
            $url = isset($upgradeInfo->url) ? $upgradeInfo->url : '';
            if($upgradeInfo->is_forced_update == 1){
                $info['upgrade'] = 2;
            }else{
                if ($clientVersion < $versionCode) {
                    $info['upgrade'] = 1;
                    $upgradeForcedInfo = Upgrade::where(['os'=>$request['os'],'is_forced_update'=>1])
                        ->where('version_code','>=',$clientVersion)
                        ->where('version_code','<=',$versionCode)
                        ->orderBy('id','desc')
                        ->first();
                    if($upgradeForcedInfo){
                        $info['upgrade'] = 2;
                    }
                } else {
                    $info['upgrade'] = 0;
                }
            }

            $info['url'] = $url;
            $info['version'] = $version;
            $info['title'] = $title;
            $info['content'] = $content;
        } else {
            $info['upgrade'] = 0;
            $info['url'] = '';
            $info['version'] = '';
            $info['title'] = '';
            $info['content'] = '';
            Log::error('未设置升级配置信息');
        }
        return $this->jsonSuccess($info);
    }
}