<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

class CreateSpecimens extends Migration {
  public function up() {
    $this->forge->addField([
      'InternalSID' => ['type' => 'INT', 'auto_increment' => true, 'unsigned' => true],
      'SID' => ['type' => 'VARCHAR', 'constraint' => 30,  'null' => false],
      'SiteID' => ['type' => 'INT', 'null' => true],
      'OrderID' => ['type' => 'INT', 'null' => true],
      'ConDefID' => ['type' => 'INT', 'null' => true],
      'Parent' => ['type' => 'varchar', 'constraint' => 30, 'null' => true],
      'Qty' => ['type' => 'INT', 'null' => true],
      'Unit' => ['type' => 'varchar', 'constraint'=> 30, 'null' => true],
      'GenerateBy' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'SchDateTime' => ['type' => 'datetime', 'null' => true],
      'CreateDate' => ['type' => 'Datetime', 'null' => true],
      'EndDate' => ['type' => 'DATETIME', 'null' => true],
      'ArchiveDate' => ['type' => 'DATETIME', 'null' => true]
    ]);
    $this->forge->addKey('InternalSID', true);
    $this->forge->addUniqueKey('SID');
    $this->forge->createTable('specimen');

    $this->forge->addField([
      'SpcStaID' => ['type' => 'INT', 'auto_increment' => true, 'unsigned' => true],
      'SID' => ['type' => 'VARCHAR', 'constraint' => 30,  'null' => false],
      'OrderID' => ['type' => 'int', 'null' => false],
      'SpcAct' => ['type' => 'varchar', 'constraint' => 15, 'null' => true],
      'ActRes' => ['type' => 'INT', 'null' => true],
      'SpcStatus' => ['type' => 'VARCHAR', 'constraint' => 50, 'null' => true],
      'Qty' => ['type' => 'INT', 'null' => true],
      'Unit' => ['type' => 'INT', 'null' => true],
      'SpcCon' => ['type' => 'INT', 'null' => true],
      'Comment' => ['type' => 'varchar', 'constraint'=>150, 'null' => true],
      'CurrSiteID' => ['type' => 'int', 'null' => true ],
      'CurrLocID' => ['type' => 'int', 'null' => true ],
      'Origin' => ['type' => 'varchar', 'constraint'=>50, 'null' => true ],
      'GeoLocationSystem' => ['type' => 'varchar', 'constraint'=>10, 'null' => true ],
      'GeoLocationData' => ['type' => 'varchar', 'constraint'=>10, 'null' => true ],
      'DIDType' => ['type' => 'varchar', 'constraint'=>10, 'null' => true ],
      'DID' => ['type' => 'varchar', 'constraint'=>10, 'null' => true ],
      'UserID' => ['type' => 'int', 'null' => true ],
      'CreateDate' => ['type' => 'Datetime', 'null' => true],
      'EndDate' => ['type' => 'DATETIME', 'null' => true],
      'ArchiveDate' => ['type' => 'DATETIME', 'null' => true]
    ]);
    $this->forge->addKey('SpcStaID', true);
    $this->forge->createTable('specimenstatus');

    $this->forge->addField([
      'SpcColID' => ['type' => 'INT', 'auto_increment' => true, 'unsigned' => true],
      'SpcStaID' => ['type' => 'INT', 'unsigned' => true],
      'SpcRole' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'ColMethod' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'BodySite' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'CntSize' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'FastingVolume' => ['type' => 'varchar', 'constraint'=> 2, 'null' => true],
      'ColStart' => ['type' => 'datetime', 'null' => true],
      'ColEnd' => ['type' => 'datetime', 'null' => true],
      'CreateDate' => ['type' => 'Datetime', 'null' => true],
      'EndDate' => ['type' => 'DATETIME', 'null' => true],
      'ArchiveDate' => ['type' => 'DATETIME', 'null' => true]
    ]);
    $this->forge->addKey('SpcColID', true);
    $this->forge->createTable('specimencollection');

    $this->forge->addField([
      'SpcPrpID' => ['type' => 'INT', 'auto_increment' => true, 'unsigned' => true],
      'SpcStaID' => ['type' => 'INT', 'unsigned' => true],
      'Description' => ['type' => 'varchar', 'constraint' => 150, 'null' => true],
      'Method' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'Additive' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'AddQty' => ['type' => 'float', 'null' => true],
      'AddUnit' => ['type' => 'VARCHAR', 'constraint' => 10, 'null' => true],
      'PrepStart' => ['type' => 'datetime', 'null' => true],
      'PrepEnd' => ['type' => 'datetime', 'null' => true],
      'CreateDate' => ['type' => 'Datetime', 'null' => true],
      'EndDate' => ['type' => 'DATETIME', 'null' => true],
      'ArchiveDate' => ['type' => 'DATETIME', 'null' => true]
    ]);
    $this->forge->addKey('SpcPrpID', true);
    $this->forge->createTable('specimenprep');

  }

  public function down() {
    $this->forge->dropTable('specimenprep');
    $this->forge->dropTable('specimencollection');
    $this->forge->dropTable('specimenstatus');
    $this->forge->dropTable('specimen');
  }
}
