<?php

namespace Modules\Manage\Http\Controllers;

use Illuminate\Routing\Controller;
use Illuminate\Http\Request;
use Modules\Manage\Enmus\MiniprogramType;
use Modules\Manage\Http\Requests\MiniprogramRequest;
use Modules\Manage\Http\Requests\MiniprogramUpdateRequest;
use Modules\Manage\Models\Miniprogram;
use Illuminate\Support\Facades\DB;
use Log;

class MiniprogramController extends Controller
{

    public function __construct(protected readonly Miniprogram $miniprogram)
    {
        
    }

    /**
     * 小程序列表
     * @param Request $request
     * @return void
     */
    public function index(Request $request)
    {
        $name = $request->get('name');
        $play_name = $request->get('play_name');
        $company = $request->get('company');
        $type = $request->get('type');
        $page_size = $request->input('limit', 15);
        $where = [];
        if($name){
            $where[] = ['name','like','%'.$name.'%']; 
        }
        if($play_name){
            $where[] = ['play_name','like','%'.$play_name.'%']; 
        }
        if($company){
            $where[] = ['company','like','%'.$company.'%']; 
        }

        if($type){
            $where[] = ['type','=',$type];
        }

        $result = $this->miniprogram->where($where)->orderBy('id','desc')->paginate($page_size);
        foreach($result as $item){
            $item->type_name = MiniprogramType::from($item->type)->name();
            $item->status_name = $item->status == 1 ?'启用':'禁用';
        }
        return $result;
    }

    /**
     * 添加小程序
     *
     * @param MiniprogramRequest $request
     * @return void
     */
    public function store(MiniprogramRequest $request)
    {
        $validate_result = $request->validated();
        $validate_result['remark'] = $request->post('remark','') ?? '';
        return $this->miniprogram->create($validate_result)->toArray();

    }

    /**
     * 小程序详情
     *
     * @param [type] $id
     * @return void
     */
    public function show($id)
    {
        return $this->miniprogram->find($id)->toArray();
    }

    /**
     * 更新小程序
     *
     * @param [type] $id
     * @param MiniprogramUpdateRequest $request
     * @return void
     */
    public function update($id, MiniprogramUpdateRequest $request)
    {
        $validate_result = $request->validated();
        if($request->post('remark','')){
            $validate_result['remark'] = $request->post('remark','');
        }
        $this->miniprogram->where('id',$id)->update($validate_result);
        return [];
    }


    /**
     * 小程序类型列表
     *
     * @return array [ ['name'=>'微信小程序','id'=>1],[],[] ]
     */
    public function typeList(){
        $type_list =  MiniprogramType::cases();
        $data = array_map( fn($item)=>['name'=>$item->name(),'value'=>$item->value()],$type_list );
        return $data;
    }


    /**
     * 获取所有公司
     *
     * @return void
     */
    public function companyList(){
        return $this->miniprogram->select(DB::raw('distinct company'))->get()->pluck('company');
    }
}