<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: your name
// +----------------------------------------------------------------------
namespace app\dice\logic\play_record;

use app\dice\basic\DiceBaseLogic;
use plugin\saiadmin\exception\ApiException;
use plugin\saiadmin\utils\Helper;
use app\dice\model\play_record\DicePlayRecord;

/**
 * 玩家抽奖记录逻辑层
 */
class DicePlayRecordLogic extends DiceBaseLogic
{
    /**
     * 构造函数
     */
    public function __construct()
    {
        $this->model = new DicePlayRecord();
        // 默认按主键倒序：最新数据优先展示
        $this->setOrderType('DESC');
    }

    /**
     * 添加前：roll_array 转为 JSON 字符串（数据库为 string 类型）
     */
    public function add(array $data): mixed
    {
        $data = $this->normalizeRollArray($data);
        return parent::add($data);
    }

    /**
     * 修改前：roll_array 转为 JSON 字符串（数据库为 string 类型）
     */
    public function edit($id, array $data): mixed
    {
        $data = $this->normalizeRollArray($data);
        return parent::edit($id, $data);
    }

    /**
     * 将 roll_array 转为 JSON 字符串，并确保 roll_number 与摇取点数一致
     */
    private function normalizeRollArray(array $data): array
    {
        if (array_key_exists('roll_array', $data)) {
            $val = $data['roll_array'];
            if (is_array($val)) {
                $data['roll_array'] = json_encode($val, JSON_UNESCAPED_UNICODE);
                if (!isset($data['roll_number'])) {
                    $data['roll_number'] = array_sum($val);
                }
            }
        }
        return $data;
    }
}
