final protected function mergeConfigInstance(
        ConfigInterface $config,
        ConfigInterface $instance = null
    ) : ConfigInterface {
        $instance  = $instance?: $this;

        // if offset detect as an increment array
        $arrayInstance  =  get_object_vars($instance);
        $arrayInstance[] = true;
        end($arrayInstance);

        $increment = key($arrayInstance);
        unset($arrayInstance);
        foreach (get_object_vars($config) as $key => $value) {
            if (isset($instance->{$key})) {
                if ($value instanceof Config) {
                    if ($instance->{$key} instanceof Config) {
                        $instance->mergeConfigInstance($value, $instance->{$key});
                        continue;
                    }

                    $instance->{$key} = $value;
                    continue;
                }

                if (is_numeric($key) && is_int(abs($key))) {
                    $key = $increment;
                    $increment++;
                }
            }

            $instance->{$key} = $value;
        }

        return $instance;
    }