<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-06-15
 * Time: 10:53
 */

namespace App\Http\Controllers\V1;


use App\Repositories\FeedRepositories;
use App\Service\AliYunVodService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use ShaoZeMing\AliVod\SDK\CreateUploadImageRequest;
use ShaoZeMing\AliVod\SDK\GetPlayInfoRequest;
use ShaoZeMing\AliVod\Services\UploadService;
use ShaoZeMing\Aliyun\Core\DefaultAcsClient;
use ShaoZeMing\Aliyun\Core\Profile\DefaultProfile;

class AliYunVodController extends Controller
{
    public function __construct(FeedRepositories $feedRepositories, AliYunVodService $aliYunVodService)
    {
        $this->feedRepositories = $feedRepositories;
        $this->aliYunVodService = $aliYunVodService;
    }

    /**
     * 获取视频上传凭证信息
     * @param Request $request
     * @return array
     * @throws \ShaoZeMing\Aliyun\Core\Exception\ClientException
     * @throws \ShaoZeMing\Aliyun\Core\Exception\ServerException
     */
    public function getVodUploadAuth(Request $request)
    {
        $request = $request->all();
        $validator = Validator::make($request, [
            'title' => 'required',
            'filename' => 'required'
        ]);
        if ($validator->fails()) {
            return jsonError($validator->errors()->first());
        }
        $instance = new UploadService(config('aliyunvod'));
        $title = $request['title'];
        $filename = $request['filename'];
        $coverUrl = isset($request['cover_url']) ? $request['cover_url'] : '';
        try {
            $result = $instance->createUploadVideo($title, $filename, '', $coverUrl);  //获取视频上传地址和凭证
//            $result = $instance->refreshUploadVideo($videoId);  //刷新视频上传凭证
//            $result = $instance->uploadMediaByURL($url, $title);  //url 拉去视屏上传
            return $this->jsonSuccess($result);
        } catch (\Exception $e) {
            return $this->jsonError('获取上传凭证失败' . $e->getMessage());
        }
    }

    /**
     * 获取图片上传凭证信息
     * @param Request $request
     * @return array
     * @throws \ShaoZeMing\Aliyun\Core\Exception\ClientException
     * @throws \ShaoZeMing\Aliyun\Core\Exception\ServerException
     */
    public function getImgUploadAuth(Request $request)
    {
        try {
            $imageInfo = $this->aliYunVodService->getImgUploadAuth();
            return $this->jsonSuccess($imageInfo);
        } catch (\Exception $e) {
            return $this->jsonError('获取上传凭证失败' . $e->getMessage());
        }
    }


    public function getPlayUrlByVideoId(Request $request)
    {
        $request = $request->all();
        $validator = Validator::make($request, [
            'video_id' => 'required'
        ]);
        if ($validator->fails()) {
            return jsonError($validator->errors()->first());
        }
        $videoId = $request['video_id'];
        $url = $this->aliYunVodService->getPlayUrlByVideoId($videoId);
        return $this->jsonSuccess(['url' => $url]);
    }
}