<?php

class modulesModelPps extends modelPps
{
  public function __construct()
  {
    $this->_setTbl('modules');
  }
  public function get($d = [])
  {
    if (isset($d['id']) && $d['id'] && is_numeric($d['id'])) {
      $fields = framePps::_()->getTable('modules')->fillFromDB($d['id'])->getFields();
      $fields['types'] = [];
      $types = framePps::_()->getTable('modules_type')->fillFromDB();
      foreach ($types as $t) {
        $fields['types'][$t['id']->value] = $t['label']->value;
      }
      return $fields;
    } elseif (!empty($d)) {
      $data = framePps::_()->getTable('modules')->get('*', $d);
      return $data;
    } else {
      return framePps::_()
        ->getTable('modules')
        ->innerJoin(framePps::_()->getTable('modules_type'), 'type_id')
        ->getAll(framePps::_()->getTable('modules')->alias() . '.*, ' . framePps::_()->getTable('modules_type')->alias() . '.label as type');
    }
  }
  public function put($d = [])
  {
    $res = new responsePps();
    $id = $this->_getIDFromReq($d);
    $d = prepareParamsPps($d);
    if (is_numeric($id) && $id) {
      if (isset($d['active'])) {
        $d['active'] = (is_string($d['active']) && $d['active'] == 'true') || $d['active'] == 1 ? 1 : 0;
      } //mmm.... govnokod?....)))
      /* else
       $d['active'] = 0;*/

      if (
        framePps::_()
          ->getTable('modules')
          ->update($d, ['id' => $id])
      ) {
        $res->messages[] = __('Module Updated', PPS_LANG_CODE);
        $mod = framePps::_()->getTable('modules')->getById($id);
        $newType = framePps::_()->getTable('modules_type')->getById($mod['type_id'], 'label');
        $newType = $newType['label'];
        $res->data = [
          'id' => $id,
          'label' => $mod['label'],
          'code' => $mod['code'],
          'type' => $newType,
          'active' => $mod['active'],
        ];
      } else {
        if ($tableErrors = framePps::_()->getTable('modules')->getErrors()) {
          $res->errors = array_merge($res->errors, $tableErrors);
        } else {
          $res->errors[] = __('Module Update Failed', PPS_LANG_CODE);
        }
      }
    } else {
      $res->errors[] = __('Error module ID', PPS_LANG_CODE);
    }
    return $res;
  }
  protected function _getIDFromReq($d = [])
  {
    $id = 0;
    if (isset($d['id'])) {
      $id = $d['id'];
    } elseif (isset($d['code'])) {
      $fromDB = $this->get(['code' => $d['code']]);
      if (isset($fromDB[0]) && $fromDB[0]['id']) {
        $id = $fromDB[0]['id'];
      }
    }
    return $id;
  }
}
