<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Crypt;

class Carrier extends Model
{
    use HasFactory;

    public const PROCESS_TYPE_AUTOMATIC = 'automatic';
    public const PROCESS_TYPE_MANUAL = 'manual';

    protected $fillable = [
        'name',
        'slug',
        'enabled',
        'process_type',
        'api_keys',
        'config_schema',
    ];

    protected function casts(): array
    {
        return [
            'enabled' => 'boolean',
            'config_schema' => 'array',
        ];
    }

    public function scopeEnabled($query)
    {
        return $query->where('enabled', true);
    }

    public function isAutomatic(): bool
    {
        return ($this->process_type ?? self::PROCESS_TYPE_AUTOMATIC) === self::PROCESS_TYPE_AUTOMATIC;
    }

    public function isManual(): bool
    {
        return ($this->process_type ?? self::PROCESS_TYPE_AUTOMATIC) === self::PROCESS_TYPE_MANUAL;
    }

    public function shipments()
    {
        return $this->hasMany(Shipment::class);
    }

    /**
     * Get decrypted API keys
     */
    public function getDecryptedApiKeys(): array
    {
        if (empty($this->api_keys)) {
            return [];
        }

        try {
            $decrypted = Crypt::decryptString($this->api_keys);
            return json_decode($decrypted, true) ?? [];
        } catch (\Exception $e) {
            return [];
        }
    }

    /**
     * Set encrypted API keys
     */
    public function setApiKeys(array $keys): void
    {
        $this->api_keys = Crypt::encryptString(json_encode($keys));
    }
}
