<?php

namespace App\Console\Commands\Debug;

use Illuminate\Console\Command;

use App\Models\Domain;

class ZoneCheck extends Command
{
	protected $signature = 'debug:zone:check'
		.' {domain : Domain Name}'
		.' {--Z|zone= : Zone}';

	protected $description = 'Check that the addresses in a zone are configured correctly';

	public function handle(): int
	{
		$do = Domain::where('name',$this->argument('domain'))->singleOrFail();

		foreach ($do->zones->sortby('zone_id') as $zo) {
			if ($this->option('zone') && ($this->option('zone') != $zo->zone_id))
				continue;

			$this->warn('Zone: '.$zo->zone_id);
			$this->info(sprintf('- Our address(es): %s',our_address($do)->pluck('ftn4d')->join(',')));

			$this->table(['id','ftn','role','parent','children','downlinks','uplink','send from','region_id','system','notes'],$zo->addresses()->FTNorder()->active()->with(['system'])->dontCache()->get()->transform(function($item) {
				return [
					'id'=>$item->id,
					'ftn'=>$item->ftn4d,
					'role'=>$item->role_name,
					'parent'=>$item->parent()?->ftn4d,
					'children'=>$item->children()->count(),
					'downlinks'=>$item->downlinks()->count(),
					'uplink'=>($x=$item->uplink())?->ftn4d,
					'send from'=>$x ? our_address($item->uplink())?->ftn4d : '',
					'region_id'=>$item->region_id,
					'system'=>$item->system->name,
					'notes'=>$item->isRoleOverride() ? 'Role Override' : '',
				];
			}));
		}

		return self::SUCCESS;
	}
}