<?php

declare(strict_types=1);

namespace App\Model;

use Hyperf\DbConnection\Model\Model;
use OpenApi\Attributes as OA;

/**
 * @property int $id 主键
 * @property int $company_id 公司 ID
 * @property int $platform_id 平台 ID
 * @property int $store_id 店铺 ID
 * @property int $refund_id 关联本地 refunds 表 ID，业务层保证约束
 * @property string $platform_parent_refund_id 平台父退款 ID, Tmall 售后单体系中的无此信息，使用默认值
 * @property string $platform_refund_id 平台退款子项 ID，如 Tmall 售后单 ID
 * @property int $refund_status_id 退款状态 ID
 * @property int $refund_type_id 退款类型：1 仅退款 2 退货退款 3 补偿退款
 * @property string $reason 退款原因
 * @property string $currency 币种
 * @property string $buyer_user_id 平台买家 ID
 * @property string $platform_order_id 平台订单 ID
 * @property string $platform_sub_order_id 平台子订单 ID
 * @property string $platform_product_id 平台商品 ID
 * @property int $quantity 退款商品数量
 * @property string $refund_amount 该子项退款金额
 * @property string $order_created_date 关联订单的创建时间
 * @property string $order_paid_date 关联订单的付款时间
 * @property string $created_date 退款单在平台的创建时间
 * @property string $updated_date 退款单在平台的更新时间
 * @property string $completed_date 退款完成时间
 * @property array $raw 平台返回的原始子项数据
 * @property array $ext 扩展字段
 * @property \Carbon\Carbon $created_at
 * @property \Carbon\Carbon $updated_at
 * @mixin \App_Model_RefundItem
 */
#[OA\Schema(
    schema: 'RefundItem',
    type: 'object',
    properties: [
        new OA\Property(property: 'id', type: 'integer', example: 1),
        new OA\Property(property: 'company_id', type: 'integer', example: 1),
        new OA\Property(property: 'platform_id', type: 'integer', example: 2),
        new OA\Property(property: 'store_id', type: 'integer', example: 100),
        new OA\Property(property: 'refund_id', type: 'integer', example: 50),
        new OA\Property(property: 'platform_parent_refund_id', type: 'string', nullable: true, example: 'PRF-001'),
        new OA\Property(property: 'platform_refund_id', type: 'string', example: 'RF-ITEM-001'),
        new OA\Property(property: 'refund_status_id', type: 'integer', example: 1),
        new OA\Property(property: 'refund_type_id', type: 'integer', example: 2),
        new OA\Property(property: 'reason', type: 'string', nullable: true, example: '商品质量问题'),
        new OA\Property(property: 'currency', type: 'string', example: 'CNY'),
        new OA\Property(property: 'buyer_user_id', type: 'string', nullable: true, example: 'buyer_123'),
        new OA\Property(property: 'platform_order_id', type: 'string', example: 'ORD-20260101-001'),
        new OA\Property(property: 'platform_sub_order_id', type: 'string', nullable: true, example: 'SUB-001'),
        new OA\Property(property: 'platform_product_id', type: 'string', nullable: true, example: 'PROD-001'),
        new OA\Property(property: 'quantity', type: 'integer', example: 1),
        new OA\Property(property: 'refund_amount', type: 'number', format: 'decimal', example: 99.99),
        new OA\Property(property: 'raw', type: 'object', nullable: true, description: '平台原始子项数据'),
        new OA\Property(property: 'ext', type: 'object', nullable: true, description: '扩展字段'),
        new OA\Property(property: 'order_created_date', type: 'string', format: 'date-time', nullable: true),
        new OA\Property(property: 'order_paid_date', type: 'string', format: 'date-time', nullable: true),
        new OA\Property(property: 'created_date', type: 'string', format: 'date-time'),
        new OA\Property(property: 'updated_date', type: 'string', format: 'date-time', nullable: true),
        new OA\Property(property: 'completed_date', type: 'string', format: 'date-time', nullable: true),
        new OA\Property(property: 'created_at', type: 'string', format: 'date-time'),
        new OA\Property(property: 'updated_at', type: 'string', format: 'date-time'),
    ]
)]
class RefundItem extends Model
{
    /**
     * The table associated with the model.
     */
    protected ?string $table = 'refund_items';

    /**
     * The attributes that are mass assignable.
     */
    protected array $fillable = ['id', 'company_id', 'platform_id', 'store_id', 'refund_id', 'platform_parent_refund_id', 'platform_refund_id', 'refund_status_id', 'refund_type_id', 'reason', 'currency', 'buyer_user_id', 'platform_order_id', 'platform_sub_order_id', 'platform_product_id', 'quantity', 'refund_amount', 'order_created_date', 'order_paid_date', 'created_date', 'updated_date', 'completed_date', 'raw', 'ext', 'created_at', 'updated_at'];

    /**
     * The attributes that should be cast to native types.
     */
    protected array $casts = ['id' => 'integer', 'company_id' => 'integer', 'platform_id' => 'integer', 'store_id' => 'integer', 'refund_id' => 'integer', 'refund_status_id' => 'integer', 'refund_type_id' => 'integer', 'quantity' => 'integer', 'raw' => 'json', 'ext' => 'json', 'created_at' => 'datetime', 'updated_at' => 'datetime'];
}
