#!/usr/bin/env php
<?php
require_once $_composer_autoload_path ?? __DIR__ . '/../vendor/autoload.php';

use Burdock\Config\Config;
use iamcal\SQLParser;
use Composer\Factory;

// config.json パスの確認とロード
$projectRootPath = dirname(Factory::getComposerFile());
$config_path = $projectRootPath .'/'. $argv[1];
if (!file_exists($config_path)) die("ARG1: config file not found.");
$config = Config::load($config_path);

// テーブル名の確認
if (empty($argv[2])) die("ARG2: table name must be specified.");

// PDO の生成
$pdo = createPdo($config->getValue('db.default'));

$def = getTableDefs($pdo, $argv[2]);
$def_json = json_encode($def, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

echo $def_json . PHP_EOL;


function createPdo(array $setting): PDO
{
    $host     = $setting['host'];
    $port     = $setting['port'];
    $dbname   = $setting['name'] ?? $setting['database'];
    $username = $setting['user'] ?? $setting['username'];
    $password = $setting['pass'] ?? $setting['password'];
    $charset  = $setting['charset'];
    $dsn = "mysql:host={$host};port={$port};dbname={$dbname};charset={$charset}";
    $options  = [
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_STRINGIFY_FETCHES => false
    ];
    return new PDO($dsn, $username, $password, $options);
}

function getTableDefs(\PDO $pdo, $table_name): array
{
    $stmt = $pdo->prepare("SHOW CREATE TABLE `{$table_name}`");
    $stmt->execute();
    $ct = $stmt->fetch();
    $parser = new SQLParser();
    $table = $ct['Table'];
    $parser->parse($ct['Create Table']);
    return $parser->tables[$table];
}
