<?php

namespace Modules\Audience\Http\Controllers;

use Catch\Base\CatchController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Channel\Services\WechatMinprogram\WechatMinprogramUserService;

class AudienceController extends  CatchController
{
    use ValidatesRequests;
    /**
     * 用户详情
     * @param Request $request
     */
    public function detail(Request $request) {
        $this->validate($request, [
            'uid' => 'required'
        ]);
        $uid = $request->input('uid');
        $userInfo = DB::table(getMiniProgramTableName(1, 'users'))->where('id', $uid)->first();
        if (!$userInfo) {
            return null;
        }
        $ranseRecordTable = 'ranse_record_'.($uid % 8);
        $ranseIds = DB::table('promotions')
            ->where('uid', $this->getLoginUserId())
            ->select('id')->pluck('id');
        if($ranseIds->isEmpty()) {
            return null;
        }
        $ranseRecord = DB::table($ranseRecordTable)->whereIn('ranse_id', $ranseIds)
            ->orderBy('created_at', 'desc')
            ->first();
        if(!$ranseRecord) {
            return null;
        }

        $totalChargeCount = DB::table('orders')
            ->where('uid', $uid)
            ->whereIn('promotion_id', $ranseIds)
            ->where('status', '<>' ,'UNPAID')
            ->count();

        $result = [
            'uid' => $userInfo->id,
            'ranse_start_at' => $ranseRecord->created_at ?: "",
            'charge_coin' => $userInfo->charge_coin,
            'reward_coin' => $userInfo->reward_coin,
            'total_charge_count' => $totalChargeCount,
            'miniprogram_name' => DB::table('miniprogram')
                ->where('id', $userInfo->miniprogram_id)->value('name'),
            'user_created_at' => $userInfo->created_at,
        ];

        return array_merge($result, WechatMinprogramUserService::getLevelText($uid));
    }
}