<?php

namespace App\Initialize;

use App\Group;
use DB;
use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Data\Group as NamiGroup;

class InitializeGroups
{
    private Api $api;

    public function __construct(Api $api)
    {
        $this->api = $api;
    }

    public function handle(): void
    {
        $this->api->groups(null)->each(function ($group) {
            $parent = Group::updateOrCreate(['nami_id' => $group->id], ['nami_id' => $group->id, 'name' => $group->name]);

            $this->syncChildren($group, $parent);
        });
    }

    private function syncChildren(NamiGroup $namiParent, Group $parent): void
    {
        $this->api->groups($namiParent)->each(function ($subgroup) use ($parent) {
            $newParent = Group::updateOrCreate(['nami_id' => $subgroup->id], ['nami_id' => $subgroup->id, 'name' => $subgroup->name, 'parent_id' => $parent->id]);
            $this->syncChildren($subgroup, $newParent);
        });
    }

    public function restore(): void
    {
        DB::table('groups')->delete();
    }
}