<?php

use Migrations\AbstractMigration;

class Initial extends AbstractMigration
{
    public $autoId = false;

    public function up()
    {
        $this->execute("SET SESSION sql_mode = ''");

        $table_prefix = $this->getAdapter()->getOption('table_prefix');

        $database_name = $this->getAdapter()->getOption('name');

        $this->execute("ALTER DATABASE {$database_name} CHARACTER SET utf8 COLLATE utf8_general_ci;");

        $this->table('activities')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('user_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('type', 'string', array(
                'comment' => 'Controller',
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('action', 'string', array(
                'comment' => 'Action',
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('message', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('ip', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addIndex(
                array(
                    'user_id',
                )
            )
            ->create();

        $this->table('ads')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('type', 'string', array(
                'comment' => '\'Interstitial Adverts\',\'Banner Adverts\'',
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->create();

        $this->table('bundles')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('user_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('user_bundle_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('name', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('private', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
            ))
            ->addColumn('description', 'text', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('views', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('updated', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addIndex(
                array(
                    'user_id',
                )
            )
            ->create();

        $this->table('links')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('user_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('long_url', 'string', array(
                'default' => '',
                'limit' => 2000,
                'null' => false,
            ))
            ->addColumn('alias', 'string', array(
                'default' => '',
                'limit' => 50,
                'null' => false,
            ))
            ->addColumn('password', 'string', array(
                'default' => '',
                'limit' => 70,
                'null' => false,
            ))
            ->addColumn('bundle_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('redirection_type', 'integer', array(
                'comment' => '0 default, 1 direct, 2 Cutom',
                'default' => 0,
                'limit' => 2,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('title', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('description', 'text', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('image', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('timer', 'integer', array(
                'default' => null,
                'limit' => 10,
                'null' => true,
                'signed' => false,
            ))
            ->addColumn('clicks', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('ip', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('updated', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addIndex(
                array(
                    'user_id',
                )
            )
            ->create();

        $this->execute('ALTER TABLE `' . $table_prefix . 'links` CHANGE `alias` ' .
            '`alias` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL;');


        $this->table('options')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('option_name', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('option_value', 'text', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->create();

        $this->table('pages')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('title', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('slug', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('published', 'integer', array(
                'default' => 0,
                'limit' => 2,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('content', 'text', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('updated', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->create();

        $this->table('plans')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('enable', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('title', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('redirections', 'text', array(
                'comment' => '1 -> Direct, 2-> Counter Page',
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('stats', 'integer', array(
                'comment' => 'no, simple, advanced',
                'default' => 0,
                'limit' => 2,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('api', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('timer', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('comments', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('sharing', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('feed', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('ads_area1', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('ads_area2', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('updated', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->create();

        $this->table('stats')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('link_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('user_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('ip', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('continent', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('country', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('state', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('city', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('location', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('browser', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('platform', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('device_type', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('device_brand', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('device_name', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('is_mobile', 'integer', array(
                'default' => 0,
                'limit' => 3,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('is_tablet', 'integer', array(
                'default' => 0,
                'limit' => 3,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('language', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('timezone', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('referer_domain', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('referer', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('user_agent', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addIndex(
                array(
                    'link_id',
                )
            )
            ->addIndex(
                array(
                    'user_id',
                )
            )
            ->create();

        $this->table('users')
            ->addColumn('id', 'integer', [
                'autoIncrement' => true,
                'default' => null,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ])
            ->addPrimaryKey(['id'])
            ->addColumn('username', 'string', array(
                'default' => '',
                'limit' => 50,
                'null' => false,
            ))
            ->addColumn('status', 'text', array(
                'comment' => '\'Active\',\'Inactive\',\'Banned\'',
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('account_type', 'text', array(
                'comment' => '\'Free\',\'admin\'',
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('plan_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('password', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('first_name', 'string', array(
                'default' => '',
                'limit' => 100,
                'null' => false,
            ))
            ->addColumn('last_name', 'string', array(
                'default' => '',
                'limit' => 100,
                'null' => false,
            ))
            ->addColumn('email', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('temp_email', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('change_email_key', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('links', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('country', 'string', array(
                'default' => '',
                'limit' => 2,
                'null' => false,
            ))
            ->addColumn('timer', 'integer', array(
                'default' => 0,
                'limit' => 3,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('feed', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('redirection_type', 'integer', array(
                'default' => 0,
                'limit' => 2,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('disqus_shortname', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('sharing', 'boolean', array(
                'default' => 0,
                'limit' => null,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('api_key', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('last_bundle_id', 'integer', array(
                'default' => 0,
                'limit' => 10,
                'null' => false,
                'signed' => false,
            ))
            ->addColumn('user_activation_key', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('login_ip', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('register_ip', 'string', array(
                'default' => '',
                'limit' => 256,
                'null' => false,
            ))
            ->addColumn('last_login', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('updated', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->addColumn('created', 'datetime', array(
                'default' => null,
                'limit' => null,
                'null' => true,
            ))
            ->create();
    }

    public function down()
    {
        $this->execute("SET SESSION sql_mode = ''");

        $table_prefix = $this->getAdapter()->getOption('table_prefix');

        $this->dropTable('activities');
        $this->dropTable('ads');
        $this->dropTable('bundles');
        $this->dropTable('links');
        $this->dropTable('options');
        $this->dropTable('pages');
        $this->dropTable('plans');
        $this->dropTable('stats');
        $this->dropTable('users');
    }
}
