<?php

/**
 * This file is part of the JustKnit package.
 *
 * @copyright JustKnit (Iris Hammer) <iris@justknit.de>
 * @license All rights reserved (@https://dejure.org/gesetze/UrhG/69a.html)
 * Created on 03-20-2023
 *
 * @package justknit
 */

use MODX\Revolution\modX;
use xPDO\Transport\xPDOTransport;

/**
 * Resolve/create database tables
 *
 * @package justknit
 * @subpackage build
 */

$tables = [
    JustKnit\Model\JustKnitClientMeta::class,
    JustKnit\Model\JustKnitOrder::class,
    JustKnit\Model\JustKnitCalc::class,
    JustKnit\Model\JustKnitDim::class,
    JustKnit\Model\JustKnitProduct::class,
    JustKnit\Model\JustKnitTransaction::class,
];

if ($object->xpdo) {
    $modx = &$object->xpdo;

    switch ($options[xPDOTransport::PACKAGE_ACTION]) {
        case xPDOTransport::ACTION_INSTALL:
        case xPDOTransport::ACTION_UPGRADE:
            $modx->log(modX::LOG_LEVEL_INFO, 'Database tables resolver - creating database tables...');
            $modx->log(modX::LOG_LEVEL_WARN, 'Existing tables will be skipped!');
            $manager = $modx->getManager();
            $count = 0;
            foreach ($tables as $table) {
                $tableName = $modx->getTableName($table);
                // Do not report table creation detailes
                $prevLogLevel = $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
                $created = $manager->createObjectContainer($table);
                $modx->setLogLevel($prevLogLevel);
                if ($created) {
                    ++$count;
                    $modx->log(modX::LOG_LEVEL_INFO, '-> added database table: ' . $tableName);
                } else {
                    $modx->log(modX::LOG_LEVEL_INFO, '-> database table ' . $tableName . ' - skipped!');
                }
            }
            break;

        case xPDOTransport::ACTION_UNINSTALL:
            $modx->log(
                modX::LOG_LEVEL_WARN,
                'Database tables resolver - database tables will not be uninstalled to prevent data loss. ' .
                'Please remove manually.'
            );
            break;
    }
}
unset($modelPath, $tables, $table, $tableName, $prevLogLevel, $created, $count);
return true;
