<?php
/**
 * Created by PhpStorm.
 * User: 思维定制
 * Date: 2019/3/4
 * Time: 15:12
 */

namespace App\Http\Controllers\Api\V1;

use App\Models\AlbumAgentModel;
use App\Models\AlbumManufacturerModel;
use App\Models\AlbumPosterModel;
use App\Services\Base\ErrorCode;
use Grafika\Color;
use Grafika\Grafika;
use Validator, Response,Auth;
use Illuminate\Http\Request;

class AlbumPosterController extends Controller
{

    /**
     * @api {post} /api/album_post/info 获取海报数据(info)
     * @apiDescription 获取海报数据(info)
     * @apiGroup Album_Post
     * @apiPermission 需要登录
     * @apiVersion 0.1.0
     * @apiParam {int}    [store_id]  商户id
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * {
     *     "status": true,
     *     "status_code": 0,
     *     "message": "",
     *     "data": [
     *           'posters':'asdawd',  //海报
     *           'words':'asdawd',    //话术
     *           'introduce':'222',   //介绍
     *           'share':'xxx'        //分享图片
     *           'phone':'xxx'        //电话
     *           'username':'xxx'     //姓名
     *           'title':'xxx'        //分享标题
     *           'qrcode':'xxx'     //二维码
     *      ]
     * }
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     * {
     *     "state": false,
     *     "code": 1000,
     *     "message": "传入参数不正确",
     *     "data": null or []
     * }
     * 可能出现的错误代码：
     *    1000    CLIENT_WRONG_PARAMS             传入参数不正确
     */
    public function posterInfo(Request $request)
    {
        $userAuth = Auth('api')->user();
        if (!$userAuth) {
            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '未登录!');
        }
        $validator = Validator::make($request->all(), [
            'store_id' => 'required',
        ], [
            'store_id.required' => '店铺信息未知',
        ]);
        if ($validator->fails()) {
            return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
        }
        $store_id = $request->input('store_id');
        $info = AlbumPosterModel::where('store_id', $store_id)->first()->toArray();
        $info['phone'] = $userAuth->phone;
        $info['username'] = $userAuth->username;
        return $this->api(compact('info'));
    }

    private function getQrCode($appId, $appSecret, $store_id)
    {
        $access = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
        $res_access = $this->curlGet($access);
        $res_access = json_decode($res_access, true);
        if (isset($res_access['access_token'])) {
            $ACCESS_TOKEN = $res_access['access_token'];
            $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $ACCESS_TOKEN;
            $data = array();
            $data['scene'] = "scene";//自定义信息，可以填写诸如识别用户身份的字段，注意用中文时的情况
            $data['page'] = "pages/index/index";//扫描后对应的path
            $data['width'] = 800;//自定义的尺寸
            $data['auto_color'] = false;//是否自定义颜色
            $color = array(
                "r" => "0",
                "g" => "0",
                "b" => "0",
            );
            $data['line_color'] = $color;//自定义的颜色值
            //dd($data,$url);
            $data = json_encode($data);
            $this->getHttpArray($url, $data, $store_id);
            return true;
        } else {
            \Log::error($res_access);
            return false;
        }
    }

    /**
     * @api {post} /api/album_post/create 生成海报(create)
     * @apiDescription 生成海报(create)
     * @apiGroup Album_Post
     * @apiPermission 需要登录
     * @apiVersion 0.1.0
     * @apiParam {int}    [store_id]  商户id
     * @apiParam {string}    [image]  图片
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * {
     *     "status": true,
     *     "status_code": 0,
     *     "message": "",
     *     "data": [
     *           'real_url':'asdawd',  //海报
     *      ]
     * }
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     * {
     *     "state": false,
     *     "code": 1000,
     *     "message": "传入参数不正确",
     *     "data": null or []
     * }
     * 可能出现的错误代码：
     *    1000    CLIENT_WRONG_PARAMS             传入参数不正确
     */
    public function createPoster(Request $request)
    {
        $userAuth = Auth('api')->user();
        if (!$userAuth) {
            return $this->error(ErrorCode::CLIENT_WRONG_PARAMS, '未登录!');
        }
        $validator = Validator::make($request->all(), [
            'store_id' => 'required',
            'image' => 'required',
        ], [
            'store_id.required' => '店铺信息未知',
            'image' => '缺少图片链接'
        ]);
        if ($validator->fails()) {
            return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
        }
        $data = $request->input();
        $info = AlbumPosterModel::where('store_id', $data['store_id'])->first()->toArray();
        $editor = Grafika::createEditor();
        $editor->open($image_poster, public_path() . '/base/poster/img/poster_canvas.png');
        $editor->open($image_poduct, str_replace(env('CDN_URL'), public_path(), $data['image']));
        $editor->blend($image_poster, $image_poduct, 'normal', 1, 'top-left', 5, 5);
        $font_bold = public_path() . '/base/poster/font/msyhbd.ttc';
        $font = public_path() . '/base/poster/font/msyh.ttc';
        for ($i = 0; $i <= 1; $i++) {
            $len = mb_strlen($info['introduce']);
            if ($len <= 17) {
                $editor->text($image_poster, $info['introduce'], 10, 5, 215, new Color("#000000"), $font_bold, 0);
                break;
            }
            if ($i == 0) {
                $text = mb_substr($info['introduce'], $i * 17, 17);
            } else {
                $text = mb_substr($info['introduce'], $i * 17, ($len - 17) > 10 ? 10 : ($len - 17));
            }
            $editor->text($image_poster, $text, 10, 5, 215 + 23 * $i, new Color("#000000"), $font_bold, 0);
        }
        $editor->open($image_icon, public_path() . '/base/poster/img/phone.png');
        $editor->blend($image_poster, $image_icon, 'normal', 1, 'top-left', 5, 270);
        $WeChatApp = AlbumManufacturerModel::where('store_id', $data['store_id'])->first();
        if ($userAuth->is_dealer != 1) {
            if ($userAuth->up_agent_id == 0) {
                $name = $WeChatApp->name;
                $phone = $WeChatApp->phone;
            } else {
                $agent_check = AlbumAgentModel::where([
                    ['store_id',$data['store_id']],
                    ['user_id',$userAuth->up_agent_id]
                ])->first();
                $name = $agent_check->realname;
                $phone = $agent_check->phone;
            }
        } else {
            $agent_check = AlbumAgentModel::where([
                ['store_id',$data['store_id']],
                ['user_id',$userAuth->id]
            ])->first();
            $name = $agent_check->realname;
            $phone = $agent_check->phone;
        }
        $editor->text($image_poster, $phone, 12, 29, 264, new Color("#eb7a48"), $font, 0);
        $editor->text($image_poster, '长按识别二维码 展示家具画册', 8, 5, 309, new Color("#666666"), $font, 0);
        $editor->open($image_qrcode, str_replace(env('CDN_URL'), public_path(), $info['qrcode']));
        $editor->resizeExactWidth($image_qrcode, 70);
        $editor->resizeExactHeight($image_qrcode, 70);
        $editor->blend($image_poster, $image_qrcode, 'normal', 1, 'top-left', 150, 235);
        $editor->text($image_poster, $name, 8, 155, 316, new Color("#666666"), $font, 0);
        $editor->save($image_poster, public_path() . '/base/poster/download/' . $userAuth->id . '.png');
        $real_url = env('CDN_URL') . '/base/poster/download/' . $userAuth->id . '.png';
        return $this->api(compact('real_url'));
    }

    /**
     * @api {post} /api/album_post/del 删除海报(del)
     * @apiDescription 删除海报(del)
     * @apiGroup Album_Post
     * @apiPermission 需要登录
     * @apiVersion 0.1.0
     * @apiParam {string}    [url]  图片
     * @apiSuccessExample {json} Success-Response:
     * HTTP/1.1 200 OK
     * {
     *     "status": true,
     *     "status_code": 0,
     * }
     * @apiErrorExample {json} Error-Response:
     * HTTP/1.1 400 Bad Request
     * {
     *     "state": false,
     *     "code": 1000,
     *     "message": "传入参数不正确",
     *     "data": null or []
     * }
     * 可能出现的错误代码：
     *    1000    CLIENT_WRONG_PARAMS             传入参数不正确
     */
    public function posterDel(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'url' => 'required',
        ], [
            'url' => '缺少图片链接'
        ]);
        if ($validator->fails()) {
            return $this->validatorError($validator->messages()->all(), ErrorCode::CLIENT_WRONG_PARAMS, '');
        }
        $url = $request->input('url');
        $real_url = str_replace(env('CDN_URL'), public_path(), $url);
        if (file_exists($real_url)) {
            unlink($real_url);
        }
        return $this->api([], 0);
    }

    private function curlGet($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

    private function getHttpArray($url, $post_data, $store_id)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);   //没有这个会自动输出，不用print_r()也会在后面多个1
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        $output = curl_exec($ch);
        file_put_contents(public_path() . '/upload/QrCode/' . $store_id . '.png', $output . PHP_EOL, FILE_APPEND);
        curl_close($ch);
        //$out = json_decode($output);
        return true;
    }
}