<?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'))->sole();

		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()->FTN()->active()->with(['system','nodes_hub'])->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;
	}
}