<?php
/*
 * description：
 * author：wh
 * email：
 * createTime：{2024/5/25} {16:37} 
 */

namespace app\api\controller;


use app\common\model\TabConf;
use think\Db;
use wanghua\general_utility_tools_php\Mmodel;
use wanghua\general_utility_tools_php\tool\Tools;

class Userplant extends BaseHttpApi
{

    /**
     * desc：查询用户拥有的植物列表
     *
     * api/userplant/listUserPlants
     *
     * author：wh
     */
    function listUserPlants(){
        return Mmodel::catchJson(function (){
            $openid = api_user_openid();
            if (empty($openid)) {
                return Tools::set_fail('openid不能为空');
            }
            $plants = Db::table(TabConf::$fa_userplant)
                ->where('openid', $openid)
                ->select();
            //foreach ($plants as $plant){
            //    Db::table(TabConf::$fa_userplantconflaterecord)
            //
            //}
            return Tools::set_ok('查询成功', $plants);
        });
    }

    /**
     * desc：植物合成
     * api/userplant/plantConflate
     *
     *
     * desc：operate_type=add时新增植物
     * plant_sit 新增植物位置
     * sys_plant_id 新增植物id（系统植物）
     *
     *
     * desc：operate_type=drag时拖拽
     * old_user_plant_data_id 原用户植物数据id
     * new_plant_sit 新植物位置
     *
     *
     * desc：operate_type=conflate时合成植物
     * target_plant_sit 目标植物位置
     * target_sys_plant_id 目标系统植物id
     * old_user_plant_data_id 旧用户植物数据id
     * new_sys_plant_data_id 新植物数据id
     *
     *
     * desc：击杀植物
     * operate_type=killPlant
     * user_plant_data_id 用户植物数据id
     */
    function plantConflate(){
        return Mmodel::catchTransJson(function (){
            $operate_type = input('operate_type');//操作类型，add：新增，drag：拖拽、3 conflate

            if($operate_type == 'add'){
                return $this->add();
            }else if ($operate_type == 'drag'){
                return $this->drag();
            }else if ($operate_type == 'conflate'){
                return $this->conflate();
            }
            else if ($operate_type == 'killPlant'){
                return $this->killPlant();
            }
            else{
                return Tools::set_fail('operate_type参数错误');
            }
        });
    }

    /**
     * author：wh
     */
    private function add(){
        $plant_sit = input('plant_sit');
        if(empty($plant_sit)){
            return Tools::set_fail('plant_sit不能为空');
        }
        $sys_plant_id = input('sys_plant_id');
        if(empty($sys_plant_id)){
            return Tools::set_fail('新增植物id（系统植物）');
        }
        //有植物就返回该位置有植物
        $userplant = Db::table(TabConf::$fa_userplant)
            ->where('openid', api_user_openid())
            ->where('plant_id', $sys_plant_id)
            ->where('plant_sit', $plant_sit)
            ->find();
        if($userplant){
            return Tools::set_fail('该位置有植物');
        }
        $plant = Db::table(TabConf::$fa_plant)
            ->where('id', $sys_plant_id)
            ->find();
        if(empty($plant)){
            return Tools::set_fail('植物不存在');
        }
        $data = [
            'openid'=>api_user_openid(),
            'plant_sit'=>$plant_sit,
            'plant_id'=>$sys_plant_id,
            'name'=>$plant['name'],
            'image'=>$plant['image'],
        ];
        //新增植物
        $dataid = Db::table(TabConf::$fa_userplant)
            ->insertGetId($data);
        $data['id'] = $dataid;
        return Tools::set_ok('ok',$data);
    }

    /**
     * author：wh
     */
    private function drag(){
        $new_plant_sit = input('new_plant_sit');
        if(empty($new_plant_sit)){
            return Tools::set_fail('新植物位置');
        }
        $old_user_plant_data_id = input('old_user_plant_data_id');
        if(empty($old_user_plant_data_id)){
            return Tools::set_fail('原用户植物数据id不能为空');
        }
        //原用户植物
        $old_user_plant = Db::table(TabConf::$fa_userplant)
            ->where('id',$old_user_plant_data_id)
            ->where('openid',api_user_openid())
            ->find();
        if(empty($old_user_plant)){
            return Tools::set_fail('原用户植物数据不存在');
        }
        //有植物就返回该位置有植物
        $userplant = Db::table(TabConf::$fa_userplant)
            ->where('openid', api_user_openid())
            ->where('plant_sit', $new_plant_sit)
            ->find();
        if($userplant){
            return Tools::set_fail('该位置有植物');
        }
        //更新该位置的植物
        Db::table(TabConf::$fa_userplant)
            ->where('id', $old_user_plant['id'])
            ->update([
                'plant_sit'=>$new_plant_sit,
            ]);
        return Tools::set_ok('ok');
    }

    /**
     * author：wh
     */
    private function conflate(){
        $target_plant_sit = input('target_plant_sit');
        if(empty($target_plant_sit)){
            return Tools::set_fail('target_plant_sit目标植物位置不能为空');
        }
        $target_sys_plant_id = input('target_sys_plant_id');//目标植物
        if(empty($target_sys_plant_id)){
            return Tools::set_fail('目标系统植物id不能为空');
        }
        //合成逻辑，该位置没有植物，给与提示
        $userplant = Db::table(TabConf::$fa_userplant)
            ->where('openid', api_user_openid())
            ->where('plant_sit', $target_plant_sit)
            ->find();
        if(empty($userplant)){
            return Tools::set_fail('该位置没有植物');
        }
        //获取该位置植物信息，如果该位置的植物不相等，提示不能合成
        if($userplant['plant_id'] != $target_sys_plant_id){
            return Tools::set_fail('该位置植物不相同，不能合成');
        }
        //删除原位置的植物，更新当前位置的植物信息
        $old_user_plant_data_id = input('old_user_plant_data_id');
        if(empty($old_user_plant_data_id)){
            return Tools::set_fail('原用户植物数据id不能为空');
        }
        Db::table(TabConf::$fa_userplant)
            ->where('id', $old_user_plant_data_id)
            ->where('openid', api_user_openid())
            ->delete();
        $new_sys_plant_data_id = input('new_sys_plant_data_id');
        if(empty($new_sys_plant_data_id)){
            return Tools::set_fail('新系统植物id不能为空');
        }
        $new_plant = Db::table(TabConf::$fa_plant)
            ->where('id', $new_sys_plant_data_id)
            ->find();
        if(empty($new_plant)){
            return Tools::set_fail('新植物不存在');
        }
        //更新当前位置的植物信息
        Db::table(TabConf::$fa_userplant)
            ->where('openid', api_user_openid())
            ->where('plant_sit', $target_plant_sit)
            ->update([
                'plant_id'=>$new_plant['id'],
                'name'=>$new_plant['name'],
                'image'=>$new_plant['image'],
            ]);
        return Tools::set_ok('ok');
    }

    /**
     * author：wh
     */
    private function killPlant(){
        $user_plant_data_id = input('user_plant_data_id');
        if(empty($user_plant_data_id)){
            return Tools::set_fail('user_plant_data_id不能为空');
        }
        $userplant = Db::table(TabConf::$fa_userplant)
            ->where('id', $user_plant_data_id)
            ->where('openid', api_user_openid())
            ->find();
        if(empty($userplant)){
            return Tools::set_fail('该植物不存在');
        }
        //删除该植物
        Db::table(TabConf::$fa_userplant)
            ->where('id', $user_plant_data_id)
            ->where('openid', api_user_openid())
            ->delete();
        return Tools::set_ok('ok');
    }
}