<?php

namespace Eadesigndev\Awb\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\DB\Ddl\Table;

/**
 * @codeCoverageIgnore
 */
class UpgradeSchema implements UpgradeSchemaInterface
{
    const TABLE = 'eadesign_awb';

    /**
     * {@inheritdoc}
     */
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();

        $awbTable = $setup->getTable(self::TABLE);

        if (!$setup->tableExists($awbTable) && version_compare($context->getVersion(), '1.1.12') < 0) {
            $table = $setup->getConnection()->newTable(
                $setup->getTable(self::TABLE)
            )->addColumn(
                'entity_id',
                Table::TYPE_SMALLINT,
                null,
                ['identity' => true,
                    'nullable' => false,
                    'primary' => true],
                'Entity Id'
            )->addColumn(
                'awb_number',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Awb Number'
            )->addColumn(
                'is_active',
                Table::TYPE_SMALLINT,
                null,
                ['unsigned' => true,
                    'nullable' => false,
                    'default' => '1'],
                'Is Active'
            )->addColumn(
                'created_at',
                Table::TYPE_TIMESTAMP,
                null,
                ['nullable' => false, 'default' => Table::TIMESTAMP_INIT],
                'Created At'
            )->addColumn(
                'order_id',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false,
                    'default' => '0'],
                'Order id'
            )->addColumn(
                'shipment_id',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false,
                    'default' => '0'],
                'Shipping id'
            )->addColumn(
                'recipient',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Name of recipient'
            )->addColumn(
                'country_id',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Country name'
            )->addColumn(
                'region_id',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Region'
            )->addColumn(
                'city',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'City'
            )->addColumn(
                'street',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Street'
            )->addColumn(
                'telephone',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Telephone number'
            )->addColumn(
                'customer_email',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Customer email'
            )->addColumn(
                'postcode',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Postcode'
            )->addColumn(
                'carrier_id',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false,
                    'default' => '0'],
                'Carrier id'
            )->addColumn(
                'payment_method',
                Table::TYPE_TEXT,
                255,
                ['nullable' => false],
                'Payment method'
            )->addColumn(
                'tariff_plan',
                Table::TYPE_TEXT,
                255,
                [],
                'Tariff plan'
            )->addColumn(
                'awb_pickup_id',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false],
                'Pickup'
            )->addColumn(
                'delivery_payment',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false],
                'Delivery payment'
            )->addColumn(
                'weight',
                Table::TYPE_DECIMAL,
                '10,2',
                ['nullable' => false],
                'Weight'
            )->addColumn(
                'packages',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false],
                'Packages'
            )->addColumn(
                'envelopes',
                Table::TYPE_INTEGER,
                19,
                ['nullable' => false],
                'Envelopes'
            )->addColumn(
                'order_value',
                Table::TYPE_DECIMAL,
                '12,2',
                [],
                'Order value'
            )->addColumn(
                'repayment_value',
                Table::TYPE_DECIMAL,
                '10,2',
                ['nullable' => false],
                'Collector account repayment'
            )->addColumn(
                'content',
                Table::TYPE_TEXT,
                500,
                ['nullable' => false],
                'Content'
            )->addColumn(
                'delivery_saturday',
                Table::TYPE_BOOLEAN,
                null,
                ['unsigned' => true,
                    'nullable' => false,
                    'default' => '0'],
                'Delivery saturday'
            )->addColumn(
                'status',
                Table::TYPE_INTEGER,
                19,
                [
                    'nullable' => false,
                    'default' => '0'],
                'Delivery saturday'
            )->addColumn(
                'open_package',
                Table::TYPE_BOOLEAN,
                null,
                ['unsigned' => true,
                    'nullable' => false,
                    'default' => '0'],
                'Open package'
            )->addColumn(
                'comments',
                Table::TYPE_TEXT,
                500,
                [],
                'Comments'
            )->addColumn(
                'delivery_company',
                Table::TYPE_TEXT,
                500,
                [],
                'Delivery company'
            );
            $setup->getConnection()->createTable($table);
        }

        if ($setup->tableExists($awbTable) && version_compare($context->getVersion(), '1.1.13') < 0) {
            $tableName = $setup->getTable($awbTable);

            $installer->getConnection()->addColumn(
                $tableName,
                'street_no',
                [
                    'type' => Table::TYPE_TEXT,
                    'length' => 100,
                    'nullable' => true,
                    'default' => null,
                    'comment' => 'Street No'
                ]
            );

            $installer->getConnection()->addColumn(
                $tableName,
                'street_type',
                [
                    'type' => Table::TYPE_TEXT,
                    'length' => 100,
                    'nullable' => true,
                    'default' => null,
                    'comment' => 'Street Type'
                ]
            );
        }

        if ($setup->tableExists($awbTable) && version_compare($context->getVersion(), '1.1.14') < 0) {
            $tableName = $setup->getTable($awbTable);

            $installer->getConnection()->addColumn(
                $tableName,
                'parcels',
                [
                    'type' => Table::TYPE_TEXT,
                    'length' => 255,
                    'nullable' => true,
                    'default' => null,
                    'comment' => 'Parcels'
                ]
            );

            $installer->getConnection()->addColumn(
                $tableName,
                'awb_cost',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_DECIMAL,
                    'length' => '10, 2',
                    'nullable' => false,
                    [],
                    'comment' => 'Awb Cost'
                ]
            );
        }

        $setup->endSetup();
    }
}