<?php

namespace Kylin\Core\Exceptions;

use Kylin\Core\Enums\CoreErrorCode;

/**
 * 参数验证异常
 *
 * 用于表示请求参数校验失败，携带字段级别的错误详情。
 * 固定使用 CoreErrorCode::ValidationError 错误码。
 *
 * 使用示例：
 *  throw new ValidationException(['email' => ['邮箱格式不正确']]);
 */
class ValidationException extends KylinException
{
    /** 字段级别的验证错误详情，格式：['字段名' => ['错误信息1', '错误信息2']] */
    protected array $errors = [];

    /**
     * @param  array        $errors   验证错误详情
     * @param  string|null  $message  自定义消息（null 则使用默认消息）
     */
    public function __construct(array $errors, ?string $message = null)
    {
        $this->errors = $errors;
        parent::__construct(CoreErrorCode::ValidationError, $message ?? CoreErrorCode::ValidationError->message());
    }

    /**
     * 获取字段级别的验证错误详情
     *
     * @return array 格式：['字段名' => ['错误信息1', '错误信息2']]
     */
    public function getErrors(): array
    {
        return $this->errors;
    }
}
