<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Instance extends Model
{
    protected $casts = [
        'last_crawled_at' => 'datetime',
        'actors_last_synced_at' => 'datetime',
        'notes' => 'array',
        'nodeinfo_last_fetched' => 'datetime',
        'delivery_next_after' => 'datetime',
    ];

    protected $fillable = [
        'domain',
        'banned',
        'auto_cw',
        'unlisted',
        'notes'
    ];

    // To get all moderated instances, we need to search where (banned OR unlisted)
    public function scopeModerated($query): void {
        $query->where(function ($query) {
            $query->where('banned', true)->orWhere('unlisted', true);
        });
    }

    public function profiles()
    {
        return $this->hasMany(Profile::class, 'domain', 'domain');
    }

    public function statuses()
    {
        return $this->hasManyThrough(
            Status::class,
            Profile::class,
            'domain',
            'profile_id',
            'domain',
            'id'
        );
    }

    public function reported()
    {
        return $this->hasManyThrough(
            Report::class,
            Profile::class,
            'domain',
            'reported_profile_id',
            'domain',
            'id'
        );
    }

    public function reports()
    {
        return $this->hasManyThrough(
            Report::class,
            Profile::class,
            'domain',
            'profile_id',
            'domain',
            'id'
        );
    }

    public function media()
    {
        return $this->hasManyThrough(
            Media::class,
            Profile::class,
            'domain',
            'profile_id',
            'domain',
            'id'
        );
    }

    public function getUrl()
    {
        return url("/i/admin/instances/show/{$this->id}");
    }
}