'boolean', 'metadata' => 'array', 'last_sync_at' => 'datetime', ]; protected $hidden = ['password']; public function setPasswordAttribute(string $value): void { $this->attributes['password'] = Crypt::encryptString($value); } public function getPasswordAttribute(string $value): string { return Crypt::decryptString($value); } public function virtualMachines() { return $this->hasMany(VirtualMachine::class); } public function templates() { return $this->hasMany(VmTemplate::class); } public function createdBy() { return $this->belongsTo(User::class, 'created_by'); } public function isOnline(): bool { return $this->status === 'online'; } public function getTypeLabel(): string { return match($this->type) { 'vcenter' => 'VMware vCenter', 'esxi' => 'VMware ESXi', 'proxmox' => 'Proxmox VE', 'hyper-v' => 'Microsoft Hyper-V', 'xen' => 'Citrix XenServer', 'kvm' => 'KVM/QEMU', default => ucfirst($this->type), }; } }