<?php
/**
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
namespace Migrations\Util;

use Cake\Datasource\ConnectionManager;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * Trait gathering schema collection used for caching
 */
trait SchemaTrait
{

    /**
     * Helper method to get the schema collection.
     *
     * @param \Symfony\Component\Console\Input\InputInterface $input Input object.
     * @param \Symfony\Component\Console\Input\OutputInterface $output Output object.
     * @return null|\Cake\Database\Schema\Collection
     */
    protected function _getSchema(InputInterface $input, OutputInterface $output)
    {
        $connectionName = $input->getOption('connection');
        $connection = ConnectionManager::get($connectionName);

        if (!method_exists($connection, 'getSchemaCollection')) {
            $msg = sprintf(
                'The "%s" connection is not compatible with orm caching, ' .
                'as it does not implement a "getSchemaCollection()" method.',
                $connectionName
            );
            $output->writeln('<error>' . $msg . '</error>');

            return null;
        }

        $config = $connection->config();

        if (empty($config['cacheMetadata'])) {
            $output->writeln('Metadata cache was disabled in config. Enable to cache or clear.');

            return null;
        }

        $connection->cacheMetadata(true);

        return $connection->getSchemaCollection();
    }
}
