#!/usr/bin/env php
<?php
$autoloadPath = null;
$autoloadPaths = array(
	__DIR__ . '/../../../autoload.php',
	__DIR__ . '/../../vendor/autoload.php',
	__DIR__ . '/../vendor/autoload.php'
);

foreach ($autoloadPaths as $file) {
	if (file_exists($file)) {
		$autoloadPath = $file;
		include($autoloadPath);
		break;
	}
}

if (is_null($autoloadPath)) {
	fwrite(
		STDERR,
		'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .
			'    composer install' . PHP_EOL . PHP_EOL .
			'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL
	);
	die(1);
}

define('BASE_FOLDER', dirname(dirname(dirname(__DIR__))));

$show_config_file_template = false;
if (array_key_exists(1, $argv)) {
	$configfile = $argv[1];

	if (!file_exists($configfile)) {
		fwrite(
			STDERR,
			'Config file does not exist.' . PHP_EOL . PHP_EOL
		);
		$show_config_file_template = true;
	}
} else {
	fwrite(
		STDERR,
		'Please specify a config file.' . PHP_EOL . PHP_EOL
	);
	$show_config_file_template = true;
}

if ($show_config_file_template) {
	fwrite(
		STDERR,
		'Create a json file with the contents like:' . PHP_EOL . PHP_EOL . file_get_contents(__DIR__ . '/../tests/testdb2modelconf.json')
	);

	die(1);
}

// Read from config

$config = array_merge([
	// Configuration defaults
	'db_host' => 'localhost',
	'db_port' => 3306,
	'db_name' => '',
	'db_username' => '',
	'db_password' => '',
	'models_output_dir' => __DIR__ . '/Auto',
	'models_output_dir_map' => [],
	'model_to_extend' => '\MyApp\ORMBaseClass',
	'base_model_extra_template' => '',
	'controller_model_to_extend' => '\Auto\Controller',
	'controller_template' => dirname(__DIR__) . '/autotemplates/controllerTemplate.latte',
	'custom_baseModel_template' => '',
	'use_namespaces' => false,
	'namespace_prefixes' => [],
	'default_namespace' => 'MyApp',
	'chronos_model' => '\Cake\Chronos\Chronos',
	'extra_model_templates' => [],
], json_decode(file_get_contents($configfile), true));

\Granada\ORM::configure('mysql:host=' . $config['db_host'] . ';port=' . $config['db_port'] . ';dbname=' . $config['db_name']);
\Granada\ORM::configure('username', $config['db_username']);
\Granada\ORM::configure('password', $config['db_password']);

\Granada\Builder\Autobuild::start()
	->setDefaultNamespace($config['default_namespace'])
	->setUseNamespaces($config['use_namespaces'])
	->setNamespacePrefixes($config['namespace_prefixes'])
	->setOutputDirs($config['models_output_dir'], $config['models_output_dir_map'])
	->setModelToExtend($config['model_to_extend'])
	->setBaseModelExtratemplate($config['base_model_extra_template'])
	->setControllerModelToExtend($config['controller_model_to_extend'])
	->setControllerTemplate($config['controller_template'])
	->setExtraModelTemplates($config['extra_model_templates'])
	->setChronosModel($config['chronos_model'])
	->setCustomBaseModelTemplate($config['custom_baseModel_template'])
	->doBuild();
