<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Services\DgPayService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

/**
 * 大观支付回调控制器
 */
class DgPayController extends Controller
{
    /**
     * @var DgPayService
     */
    protected DgPayService $payService;

    /**
     * 构造函数
     */
    public function __construct(DgPayService $payService)
    {
        $this->payService = $payService;
    }

    /**
     * 支付异步通知
     *
     * @param Request $request
     * @return \Illuminate\Http\Response
     */
    public function notify(Request $request)
    {
        // 记录通知数据
        $data = $request->all();
        Log::info('DgPay notify:', $data);

        // 验证签名
        if (!$this->payService->verifySign($data)) {
            Log::error('DgPay notify sign verify failed');
            return response('sign error');
        }

        // 处理支付结果
        try {
            // 支付成功
            if ($data['trade_status'] === 'SUCCESS') {
                // TODO: 在这里处理您的业务逻辑
                // 1. 验证订单金额是否正确
                // 2. 修改订单状态
                // 3. 发送通知等

                // 处理成功后返回成功标识
                return response('success');
            }

            // 其他状态直接返回成功
            return response('success');
        } catch (\Exception $e) {
            Log::error('DgPay notify process error: ' . $e->getMessage());
            return response('fail');
        }
    }

    /**
     * 支付同步跳转
     *
     * @param Request $request
     * @return \Illuminate\Http\Response
     */
    public function return(Request $request)
    {
        // 记录跳转数据
        $data = $request->all();
        Log::info('DgPay return:', $data);

        // 验证签名
        if (!$this->payService->verifySign($data)) {
            Log::error('DgPay return sign verify failed');
            return response('签名验证失败');
        }

        // TODO: 在这里处理跳转逻辑
        // 1. 可以跳转到订单详情页
        // 2. 可以跳转到支付成功页
        // 3. 可以根据业务需求自定义跳转

        return response()->json([
            'message' => '支付成功'
        ]);
    }
}