<?php

namespace App\Models;

use App\Enums\DeploymentStatus;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

/**
 * @property int $site_id
 * @property int $deployment_script_id
 * @property int $log_id
 * @property string $commit_id
 * @property string $commit_id_short
 * @property array $commit_data
 * @property string $status
 * @property Site $site
 * @property DeploymentScript $deploymentScript
 * @property ServerLog $log
 */
class Deployment extends AbstractModel
{
    use HasFactory;

    protected $fillable = [
        'site_id',
        'deployment_script_id',
        'log_id',
        'commit_id',
        'commit_data',
        'status',
    ];

    protected $casts = [
        'site_id' => 'integer',
        'deployment_script_id' => 'integer',
        'log_id' => 'integer',
        'commit_data' => 'json',
    ];

    public static array $statusColors = [
        DeploymentStatus::DEPLOYING => 'warning',
        DeploymentStatus::FINISHED => 'success',
        DeploymentStatus::FAILED => 'danger',
    ];

    public function site(): BelongsTo
    {
        return $this->belongsTo(Site::class);
    }

    public function deploymentScript(): BelongsTo
    {
        return $this->belongsTo(DeploymentScript::class);
    }

    public function log(): BelongsTo
    {
        return $this->belongsTo(ServerLog::class, 'log_id');
    }
}