<?php
/**
 * Created by PhpStorm.
 * User: ZCY
 * Date: 2018/10/15
 * Time: 10:26
 */
namespace backend\controllers;
use backend\models\coin\CoinApplicationForm;
use common\models\psources\CoinAppCate;
use common\models\psources\CoinApplication;
use common\models\psources\CoinApplicationCategory;
use common\models\psources\CoinImage;
use Yii;
class ApplicationController extends BaseController
{
    /**
     * @return array|string|\yii\db\ActiveRecord[]
     * 应用列表
     */
    public function actionList()
    {
        if(Yii::$app->request->isAjax){
            $id = Yii::$app->request->get('id');
            Yii::$app->response->format = 'json';
            $request = Yii::$app->request;
            $page    = $request->get('page', 1);
            $limit   = $request->get('limit', 10);
            $data    = CoinApplication::getListByCategory($page, $limit, $id);
            return $data;
        }else{
            $id = Yii::$app->request->get('id');
            if($id){
                $parent_category = CoinApplicationCategory::getCategoryById($id);
                $platform_id = Yii::$app->user->identity->platform_id;
                $condition = ['platform_id' => $platform_id];
                $cate_items = CoinApplicationCategory::getCateItemsArray($condition);
                if($parent_category){
                    return $this->render('list',['parent_category' => $parent_category,'cate_items' => $cate_items]);
                }else{
                    $this->error('id参数不合法', Yii::$app->request->getReferrer());
                }

            }else{
                $this->error('id参数不能为空', Yii::$app->request->getReferrer());
            }
        }
    }

    /**
     * @return string
     * 添加应用
     */
    public function actionAdd()
    {
        if(Yii::$app->request->isPost){
            Yii::$app->response->format = 'json';
            $category_id = Yii::$app->request->get('category_id');
            $fields = ['category_id','h5_icon','official_url','introduce_image','show_width','show_height','open_type', 'open_type_app', 'name','sort','icon','type','native_url','native_login_url','h5_url','android_url','ios_url','app_store_url','advertise','description','redirect_type', 'platform_id'];
            $data = Yii::$app->request->post();
            $data['open_type_app']  = (0 == $data['open_type_app']) ? 1 : $data['open_type_app'];
            $params = array_merge($data,['category_id' => $category_id, 'platform_id' => Yii::$app->user->identity->platform_id]);
            $params = $this->initParams($params, $fields);
            $coin_applicateion_form = new CoinApplicationForm();
            $coin_applicateion_form->setScenario(CoinApplicationForm::SCENARIO_ADD);
            $coin_applicateion_form->load($params,'');
            $result = $coin_applicateion_form->add();
            if($result['code'] == 0){
                $this->success('添加成功', '/admin/application/list?id='.$category_id);
            }else{
                $this->error($result['msg'], Yii::$app->request->getReferrer());
            }
        }
        return $this->render('add');
    }

    /**
     * @return array|string
     * 应用编辑
     */
    public function actionEdit()
    {
        if (Yii::$app->request->isPost) {
            Yii::$app->response->format = 'json';
            $fields = ['category_id','id','h5_icon','official_url','introduce_image','show_width','show_height','open_type', 'open_type_app', 'name','sort','icon','type','native_url','native_login_url','h5_url','android_url','ios_url','app_store_url','advertise','description','redirect_type', 'platform_id'];
            $data = Yii::$app->request->post();
            $data['open_type_app']  = (0 == $data['open_type_app']) ? 1 : $data['open_type_app'];
            $params = array_merge($data,['platform_id' => Yii::$app->user->identity->platform_id]);
            $params = $this->initParams($params, $fields);
            $coin_applicateion_form = new CoinApplicationForm();
            $coin_applicateion_form->setScenario(CoinApplicationForm::SCENARIO_EDIT);
            $coin_applicateion_form->load($params,'');
            return $coin_applicateion_form->edit();
        } elseif (Yii::$app->request->isGet) {
            $id = Yii::$app->request->get('id', null);
            $category_id = Yii::$app->request->get('category_id', null);
            if ($id) {
                $applicate         = CoinApplication::getApplicateById($id);
                $coin_ids = [];
                if($applicate['icon']){
                    $coin_ids[] = $applicate['icon'];
                }
                if($applicate['h5_icon']){
                    $coin_ids[] = $applicate['h5_icon'];
                }
                if($applicate['introduce_image']){
                    $coin_ids[] = $applicate['introduce_image'];
                }
                if($coin_ids){
                    $coin_items = CoinImage::getItemsByIds($coin_ids);
                }
                $app_cate = CoinAppCate::getAppCate($category_id,$id);
                if($applicate['icon']){
                    $icon_info = $coin_items[$applicate['icon']];
                    $applicate['icon_url'] =$icon_info['base_url'].$icon_info['file_url'];
                }else{
                    $applicate['icon_url'] ="";
                }
                if($applicate['h5_icon']){
                    $icon_info = $coin_items[$applicate['h5_icon']];
                    $applicate['h5_icon_url'] =$icon_info['base_url'].$icon_info['file_url'];
                }else{
                    $applicate['h5_icon_url'] ="";
                }
                if($applicate['introduce_image']){
                    $icon_info = $coin_items[$applicate['introduce_image']];
                    $applicate['introduce_image_url'] =$icon_info['base_url'].$icon_info['file_url'];
                }else{
                    $applicate['introduce_image_url'] ="";
                }
                $applicate['sort'] = $app_cate->sort;
                $this->layout = false;
                return $this->render('edit', ['item' => $applicate,'category_id' => $category_id]);
            }
        }
    }

    /**
     * @return array
     * @throws \Throwable
     * @throws \yii\db\StaleObjectException
     * 应用删除
     */
    public function actionDelete()
    {
        Yii::$app->response->format = 'json';

        $id = Yii::$app->request->get('id');
        $category_id = Yii::$app->request->get('category_id');
        if ($id && $category_id) {
            $coin_applicateion_form = new CoinApplicationForm();
            return $coin_applicateion_form->del($id,$category_id);
        }
        return ['code' => 1, 'msg' => 'failed'];
    }

    /**
     * @return array
     * 设置应用所属分类
     */
    public function actionAddCategory()
    {
        if(Yii::$app->request->isPost){
            Yii::$app->response->format = 'json';
            $cate_id =  Yii::$app->request->post('cate_id');
            $app_id =  Yii::$app->request->post('app_id');
            $sort =  Yii::$app->request->post('sort',0);
            $coin_applicateion_form = new CoinApplicationForm();
            return $coin_applicateion_form->addCategory($app_id,$cate_id,$sort);
        }
    }

    /**
     * @return array|string
     * 应用图片页面
     */
    public function actionImageIndex()
    {
        if(Yii::$app->request->isAjax){
            $id = Yii::$app->request->get('id');
            $image_category = Yii::$app->request->get('image_category',1);
            Yii::$app->response->format = 'json';
            $applicate = CoinApplication::getApplicate($id);
            if($applicate){
                if($image_category == 1){
                    $data = CoinImage::getItemsByImageIds($applicate->image_ids);
                }else if($image_category == 2){
                    $data = CoinImage::getItemsByImageIds($applicate->h5_image_ids);
                }else{
                    $data = ['code' => 0,'data' => []];
                }
            }else{
                $data = ['code' => 0,'data' => []];
            }
            return $data;
        }else{
            $id = Yii::$app->request->get('id');
            if($id){
                $applicate = CoinApplication::getApplicate($id);
                if($applicate){
                    return $this->render('image-index',['applicate' => $applicate]);
                }else{
                    $this->error('id参数不合法', Yii::$app->request->getReferrer());
                }

            }else{
                $this->error('id参数不能为空', Yii::$app->request->getReferrer());
            }
        }
    }

    /**
     * @return array
     * 添加应用详情图片
     */
    public function actionAddImage()
    {
        if(Yii::$app->request->isPost){
            Yii::$app->response->format = 'json';
            $id = Yii::$app->request->post('applicate_id',0);
            $image_id = Yii::$app->request->post('image',0);
            $image_category = Yii::$app->request->post('image_category',1);
            if($id && $image_id){
                $coin_applicate_form = new CoinApplicationForm();
                return $coin_applicate_form->addImage($id,$image_id,$image_category);
            }else{
                return ['code' => 1,'msg'=> '图片添加失败'];
            }
        }
    }

    /**
     * @return array
     * 删除应用详情图片
     */
    public function actionDeleteImage()
    {
        Yii::$app->response->format = 'json';
        $id = Yii::$app->request->get('id');
        $applicate_id = Yii::$app->request->get('applicate_id');
        $image_category = Yii::$app->request->get('image_category',1);
        if ($id && $applicate_id) {
            $coin_applicateion_form = new CoinApplicationForm();
            return $coin_applicateion_form->delImage($id,$applicate_id,$image_category);
        }
        return ['code' => 1, 'msg' => 'failed'];
    }

    /**
     * @return array
     * 设置应用排序
     */
    public function actionSetSort()
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = 'json';
            $request = Yii::$app->request;
            $id    = $request->get('id', '');
            $category_id  = $request->get('category_id','');
            $sort  = $request->get('sort',1);
            if($id && $category_id){
                $app_cate = CoinAppCate::getAppCate($category_id,$id);
                if(!$app_cate){
                    return ['code' => 1,'msg' =>'应用不存在,不能设置排序'];
                }
                $app_cate->sort=$sort;
                $app_cate->save();
                return ['code' => 0,'msg' => '应用排序设置成功'];
            }else{
                return ['code' => 1 ,'msg' => '应用排序设置失败'];
            }
        }
    }

    /**
     * @return array
     * 设置是否显示
     */
    public function actionSetEnable()
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = 'json';
            $request = Yii::$app->request;
            $id    = $request->get('id', '');
            $enable  = $request->get('enable',1);
            if($id){
                $applicate = CoinApplication::getApplicate($id);
                if(!$applicate){
                    return ['code' => 1,'msg' =>'应用不存在,不能设置启用状态'];
                }
                $applicate->enable = $enable;
                $applicate->save();
                return ['code' => 0,'msg' => '应用使用状态设置成功'];
            }else{
                return ['code' => 1 ,'msg' => '应用使用状态设置失败'];
            }
        }
    }

    /**
     * @return array
     * 设置h5显示尺寸
     */
    public function actionSetH5ImageShowtype()
    {
        if (Yii::$app->request->isAjax) {
            Yii::$app->response->format = 'json';
            $request = Yii::$app->request;
            $id    = $request->get('app_id', '');
            $h5_image_showtype  = $request->get('h5_image_showtype',1);
            if($id){
                $applicate = CoinApplication::getApplicate($id);
                if(!$applicate){
                    return ['code' => 1,'msg' =>'应用不存在'];
                }
                $applicate->h5_image_showtype = $h5_image_showtype;
                $applicate->save();
                return ['code' => 0,'msg' => '显示尺寸设置成功'];
            }else{
                return ['code' => 1 ,'msg' => '显示尺寸设置失败'];
            }
        }
    }

}