<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class RedirectModel extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->model('blogModel', '', TRUE);
    }

    public function insertRedirect($url, $name, $temp = false, $expireDate = null) {
        $result1 = $this->db->query('SELECT * FROM redirects WHERE redirect = ?', [$name])->result_array();

        if(empty($result1)) {
            $this->db->query('INSERT INTO redirects (url, redirect, temporary, expireDate) VALUES (?, ?, ?, ?)', [$url, $name, $temp, $expireDate]);
            return ['feedback' => 'success'];
        } else {
            return ['feedback' => 'error', 'message' => 'Umleitungs-Code ist schon vergeben!'];
        }
    }

    public function editRedirect($id, $url, $name) {
        $this->db->query('UPDATE redirects SET url = ? WHERE ID = ? AND redirect = ?', [$url, $id, $name]);
    }

    public function removeRedirect($id) {
        $this->db->query('DELETE FROM redirects WHERE ID = ?', [$id]);
    }

    public function getUrl($name) {
        $result1 = $this->db->query('SELECT * FROM redirects WHERE redirect = ?', [$name])->result_array();

        if(empty($result1)) {
            return base_url();
        } else {
            $result = $result1[0];
            return $result['url'];
        }
    }

    public function getItems() {
        $result = $this->db->query('SELECT * FROM redirects')->result_array();
        return $result;
    }

    public function getName($url) {
        $result = $this->db->query('SELECT * FROM redirects WHERE url = ?', [$url])->result_array();

        if(empty($result)) {
            return '';
        } else {
            $result1 = $result[0];
            return $result1['redirect'];
        }
    }

    public function addRandomItem($url, $temporary, $temporaryTime) {
        $alreadyExists = $this->getName($url);
        if($alreadyExists == '') {
            for($i = 0; $i < 1; $i++) {
                $randomName = base64_encode($url);
                $name = '';
                for($j = 0; $j < 5; $j++) {
                    $random = rand(0, strlen($randomName) - 1);
                    $name .= $randomName[$random];
                }
                $expireDate = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s') . ' + ' . $temporaryTime . ' hours'));
                if($this->insertRedirect($url, $name, $temporary, $expireDate)['feedback'] == 'success') {
                    return $this->getName($url);
                } else {
                    $i--;
                }
            }
        } else {
            return $alreadyExists;
        }
    }

}