public function load(): Configuration
    {
        $this->logger->info(self::CONFIG_PATH . ' = ' . $this->getPath());
        $this->logger->info(self::STAGE . ' = ' . $this->getStage());

        if ($this->getPath() !== self::DEFAULT_CONFIG_PATH) {
            $message = 'Please use default [%s] configuration location instead of [%s]. If you use configuration locally, ignore this message.';
            $this->logger->warning(sprintf($message, self::DEFAULT_CONFIG_PATH, $this->getPath()));
        }

        $second = $this->getStage() !== self::DEFAULT_STAGE
            ? $this->parseConfiguration($this->getStage())
            : [];

        $this->config = $this->arrayMergeRecursive(
            $this->parseConfiguration(),
            $second
        );

        $this->logger->info('Configuration loaded.');

        return $this;
    }