<?php

/*
* fooStack, CIUnit for CodeIgniter
* Copyright (c) 2008-2009 Clemens Gruenberger
* Released under the MIT license, see:
* http://www.opensource.org/licenses/mit-license.php
*/

/*
* generate fixtures from test database
* fixtures are named according to convention and are only
* created if they didin't exist before
*
*/

include(dirname(__FILE__) . '/CIUnit.php');

set_controller();

/*
* this function for extraction of command line arguments 
* might go back into some foo helper class
*/
function args_arr($arg_arr = false)
{
  //extract commandline arguments
  if($arg_arr === false)
  {
    $argv = $_SERVER['argv'];
  }
  else
  {
    $argv = $arg_arr;
  }
  array_shift($argv);

  $flags = array();
  $params = array();
  $args = array();
  foreach ($argv as $arg)
  {
    $param_parts = preg_split('/=/', $arg);
    if (count($param_parts) == 2)
    {
      $params[$param_parts[0]] = $param_parts[1];
    }
    else
    {
      if (substr($arg,0,1) == "-")
      {
        $flags[] = substr($arg, 1);
      }
      else
      {
        $args[] = $arg;
      }
    }
  }
  return array('params' => $params, 'flags' => $flags, 'args' => $args);
}


class Generate {

    function __construct()
    {
        $this->CI = &get_instance();
        $this->CI->load->library('Spyc');
        $this->CI->load->library('Fixture');
        $this->args_arr = args_arr();
        $this->params = $this->args_arr['params'];
        $this->args = $this->args_arr['args'];
        $this->flags = $this->args_arr['flags'];

        if (isset($this->args[0]))
        {
            $function = $this->args[0];
            $this->$function();
        }
        else
        {
            echo "
Please specify what task to run:
e.g.: 'php generate fixtures' or
      'php generate migration'

flags can by specified by '-flag'
parameters by 'PARAM=VALUE'
e.g.: 'php generate fixtures -verbose'
      'php generate fixtures db=different_db_than_default'

To receive more information on a task
type  'php generate help task'
e.g.: 'php generate help migration'
";
        }
    }

    function fixtures()
    {
        $db = isset($this->params['db'])? $this->params['db']:'db';
        $prefix = ($db == 'db2')? "db2_":"";

        $this->CI = set_controller('twiml');

        echo "generating...\n";        
        $tables = $this->CI->$db->list_tables();

        foreach ($tables as $table)
        {
              echo $table;
              $fields = $this->CI->$db->list_fields($table);
              $fixt_name= 'fixtures/'.$prefix.$table.'_fixt.yml';
              if (file_exists($fixt_name))
              {
                    echo "fixture $fixt_name already exits!\n";
              }
              else
              {
                    $h = fopen($fixt_name, 'w') or die("can't open file");
                    //write fixture!
                    foreach (array('first', 'second', 'third') as $rowname)
                    {
                        fwrite($h, $rowname.":\n");
                        foreach ($fields as $field)
                        {
                              //echo $field;
                              fwrite($h, '    ' . $field . ": \n");
                        }
                        fwrite($h, "\n");
                    }

                    echo " *** fixture $fixt_name written.\n";
                    fclose($h);
              }
        }

    }

}

$gen = new Generate();
