<?php

/**
 * Order script for module builder modules
 * @author Rihards Silins <rihards.silins@mtcmedia.co.uk>
 * @version 1 16/12/2016
 * @copyright MTC media Ltd.
 */
$path = '../../../../';
require_once $path.'core/includes/header.inc.php';
require_once '../includes/settings.php'; // MODEL SETTINGS

if (empty($_GET['rorder'])) {
    header('HTTP/1.0 400 Bad Request');
    exit();
}

if (
    ! empty($_GET['relation_key'])
    && preg_match('/^[a-zA-Z_]+$/', $_GET['relation_key'])
    && isset($module['relations'][$_GET['relation_key']])
) {
    $model_class_name = $module['relations'][$_GET['relation_key']]['class_name'];
} else {
    $model_class_name = MODEL_CLASS_NAMESPACE_PREFIX.MODEL_CLASS_NAME;
}

$new_order = array();
for ($i = 0; $i < count($_GET['rorder']); $i++) {
    if (! empty($_GET['rorder'][$i]) && is_numeric($_GET['rorder'][$i])) {
        $new_order[] = (int) $_GET['rorder'][$i];
    }
}

$module_list_order_array_key_thats_ordering_by_order = false;
$module_list_order_string = '';

$top_order_row_builder = $model_class_name::whereIn('id', $_GET['rorder']);
// apply order
if (! empty($module['list_order'])) {
    foreach ($module['list_order'] as $key => $order) {
        $top_order_row_builder = $top_order_row_builder->orderBy($order[0], $order[1]);
        if ($order[0] === 'order') {
            $module_list_order_array_key_thats_ordering_by_order = $key;
        }
        $module_list_order_string = "'".$order[0]."' ".($order[1] === 'asc' ? 'ascending' : 'descending');
    }
}

if ($module_list_order_array_key_thats_ordering_by_order === false) {
    $error_message = "Can't order this list with drag and drop ordering. The ".ucwords(MODEL_PLURAL);
    $error_message .= ' in this list are being ordered by '.$module_list_order_string;
    $error_message .= " and needs to be ordered by 'order' for the drag and drop ordering to work.";
    $_SESSION['model_form']['error'][] = $error_message;
    exit(json_encode([
        'result' => false,
        'message' => $error_message,
    ]));
}

$top_order_row = $top_order_row_builder->first();

$order = $top_order_row->order;
for ($i = 0; $i < count($new_order); $i++) {
    $row = $model_class_name::find($new_order[$i]);
    $row->order = $order;
    $row->save();
    if ($module['list_order'][$module_list_order_array_key_thats_ordering_by_order][1] === 'asc') {
        ++$order;
    } else {
        --$order;
    }
}

exit(json_encode([
    'result' => true,
    'message' => 'Success!',
]));
