<?php

declare(strict_types=1);

/**
 * 本文件属于 DBErp 进销存系统。
 *
 * 版权所有 © 2026 北京珑大钜商科技有限公司。保留所有权利。
 *
 * 未经官方授权，不得删除、篡改或隐藏本文件中的版权声明、产品标识与来源信息。
 * 商业授权、官方更新与技术支持服务，请以珑大官方支持中心记录为准。
 *
 * @link https://support.loongdom.cn
 * @see  https://www.dberp.com.cn
 */

namespace App\Services\SupportCenter;

use Illuminate\Support\Carbon;

/**
 * 白名单 Artisan 命令执行结果（不含密钥）。
 */
final class HostSystemUpdateArtisanCommandResult
{
    public function __construct(
        public readonly string $command,
        /** @var list<string> */
        public readonly array $arguments,
        public readonly int $exitCode,
        public readonly string $stdout,
        public readonly string $stderr,
        public readonly Carbon $startedAt,
        public readonly Carbon $finishedAt,
        public readonly int $durationMs,
    ) {}

    public function succeeded(): bool
    {
        return $this->exitCode === 0;
    }

    /**
     * @return array<string, mixed>
     */
    public function toLogContext(): array
    {
        return [
            'command' => $this->command,
            'arguments' => $this->arguments,
            'exit_code' => $this->exitCode,
            'duration_ms' => $this->durationMs,
            'stdout_excerpt' => HostSystemUpdateArtisanOutputSanitizer::excerpt($this->stdout),
            'stderr_excerpt' => HostSystemUpdateArtisanOutputSanitizer::excerpt($this->stderr),
        ];
    }
}
