<?php

class rally{
	private $db;
	private $session = array();
	private $get = array();
	private $grund;
	
	function __construct(){
		global $datenbank,$_SESSION,$_GET,$grundconfig;
		$this->db = $datenbank;
		$this->session = $this->db->escape($_SESSION);
		$this->get = $this->db->escape($_GET);
		$this->grund = $grundconfig;
	}
	
	public function RallyDaten($rally){
		$rally = $this->db->escape($rally);
		$ret =  $this->db->get_row("SELECT * FROM ". PREFIX . RALLY ." WHERE name = '$rally' ",true);
		return $ret;
	}
	
	public function Info($row){
		$aus = '';
		$gesperrt = explode(',', $row->sperruser);
		if (in_array($_SESSION['uid'], $gesperrt)) {
			$aus .= '<br><b><font size="+1" color="#9F0101">!!Gesperrt!!<br>Sie wurden vom Admin von dieser Rally ausgeschlossen.</font></b><br><br>';
		}else{
			$aus .= $this->SelfStatus($row);
			$aus .= '<hr><div class="card"><div class="card-body">';
			$aus .= $this->RallyEnde($row);
			$aus .= '<hr>';
			$aus .= $this->RallyGewinnart($row);
			$aus .= '<hr>';
			$aus .= $this->RallyAktuell($row);
			$aus .= '</div>';
		}
		
		return $aus;
	}
	
	private function RallyAktuell($row){
		
		$rp = 1;
		$aus = '
			<table class="table table-striped">
				<tr>
					<th width="30"><b>Rang</b></th>
					<th><b>User</b></th>
					<th width="100"><b>' . $row->einheit . '</b></th>
					<th width="180"><b>möglicher Gewinn</b></th>
					<th width="110"><b>Mindestpunktzahl</b></th>
				</tr>
		';
		$gesperrt = explode(";",$row->sperruser);
		foreach($this->db->get_results("SELECT uid,punkte FROM ". PREFIX . RALLYU ." WHERE rally = '$row->id' AND ausgezahlt = '0' ORDER BY punkte DESC") AS $res){
			if(!in_array($res->uid,$gesperrt) && $row->gewinner_anzahl >= $rp){
				$pl = 'p'.$rp;
				$user = userinfo($res->uid);
				if($res->punkte < $row->mindestpunktzhl){ $classtd = 'table-warning'; $mg = 'nicht erreicht';}
				if($res->punkte >= $row->mindestpunktzhl){ $classtd = 'table-success'; $mg = 'erreicht';}
				$aus .= '
					<tr class="'. $classtd .'">
						<td>'. $rp .'</td>
						<td>'. $user->nickname .'</td>
						<td>'. $res->punkte .'</td>
						<td>'. number_format(($row->gewinn_topf / 100 * $row->$pl), 2, ',', '.') .' '. $this->grund->waehrung .'</td>
						<td>'. $mg .'</td>
					</tr>
				';
				$rp++;
			}
		}
		
		for($x = $rp;$x < $row->gewinner_anzahl + 1;$x++) {
			$pl = 'p'.$rp;
			$mg = number_format(($row->gewinn_topf / 100 * $row->$pl), 2, ',', '.') . ' ' . $this->grund->waehrung;
			$aus .= '
			<tr class="table-info">
				<td>'. $rp++ .'&nbsp;</td>
				<td>&nbsp;n/a</td>
				<td>0&nbsp;</td>
				<td>'. $mg .'&nbsp;</td>
				<td><strong>Wartend</strong></td>
			</tr>
			';
		}
		$aus .= '</table>';
		return $aus;
	}
	
	private function RallyGewinnart($row){
		if ($row->gewinn_art == 'dynamisch') {
			$aus = 'Es handelt sich bei der ' . $row->name . '-Rally um eine Dynamische Rally. <br>
			Dies bedeutet der Gewinn pro Rang steigt mit der Aktivit&auml;t der User in der Rally. <br>
			Der Gewinn-Topf ist nach oben nicht begrenzt und beträgt aktuell  ' . number_format($row->gewinn_topf,2,',','.') . ' ' . $this->grund->waehrung . '. <br> ';
		} else {
			$aus = 'Es handelt sich bei der ' . $row->name . '-Rally um eine Statische Rally. <br>
			Die gesammte Gewinnsumme bel&auml;uft sich auf ' . number_format($row->gewinn_topf,2,',','.') . ' ' . $this->grund->waehrung . '. <br>';
		}
			$aus .= '<hr>';
		if ($row->mindestpunktzhl > '0') {
			$aus .= '<br>Sie müssen mindestens ' . $row->mindestpunktzhl . ' ' . $row->ende_formulierung . ' haben um in der Rally gewertet zu werden<br><br>';
		}
		
		return $aus;
	}
	
	private function RallyEnde($row){
		if ($row->ende_art == 'punkt') {
			$aus = 'Diese ' . $row->name . '-Rally endet soball alle gemeinsam ' . $row->ende_punkte . ' ' . $row->ende_formulierung . ' haben.<br> ';
		} elseif ($row->ende_vortschritt == 'datum') {
			$aus = 'Diese ' . $row->name . '-Rally endet am ' . date('j F Y  G:i', strtotime($row->ende_date.'T'.$row->ende_time)) . '<br>';
		} else {
			$aus = 'Diese Rally hat kein Ende. Sie wird immer wieder in bestimmten Abständen (' . $row->ende_vortschritt . ') neu gestartet.<br>';
		}
		
		return $aus;
	}
	
	private function SelfStatus($row){
		$aus = '';
		if ($this->session['login'] == true) {
			if($this->db->num_rows("SELECT uid FROM ". PREFIX. RALLYU ." WHERE uid = '". $this->session['uid'] ."' AND rally = '$row->id' ") == 1){
				$rallystand = $this->db->get_row("SELECT punkte FROM ". PREFIX . RALLYU ." WHERE uid=" . $this->session['uid'] . " and  rally = '$row->id' LIMIT 1",true);
				$aus = '<div class="alert alert-info">Du hast in der ' . $row->name . '-Rally bereits ' . number_format($rallystand->punkte, 0, ",", ".") . ' ' . nl2br($row->ende_formulierung) . '.</div>';
			}else{
				$aus =  '<div class="alert alert-warning">Du hast in dieser Rally noch keine Punkte erziehlt.</div>';
			}
		}
		return $aus;
	}
	
	public function ProgressBar($row,$start,$ende){
		if ($row->status != 'aktive') {
			$swf_prozent = 0;
			$swf_status = "Rally aktuell Inaktive.";
		} else if (time() < $start) {
			$swf_prozent = 0;
			$swf_status = "Noch nicht gestartet.";
		} elseif (($row->ende_art == 'zeit' && $ende <= time()) OR ($row->ende_art == 'punkt' && $row->ende_punkte <= $row->ende_punkte_aktuell)) {
			$swf_prozent = 100;
			$swf_status = "Erfolgreich Beendet.";
		} else {
			if ($row->ende_art == 'zeit') {
				if ($row->ende_vortschritt == 'datum') {
					$swf_prozent = number_format((time() - $start) / ($ende - $start) * 100, 0, ',', '\'');
					$swf_status = sectodays(strtotime($row->ende_date.' '.$row->ende_time) - time());
				} elseif ($row->ende_vortschritt == 'Jeden Tag') {
					$tag = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
					$ende = $tag + (24 * 60 * 60);
					$swf_prozent = number_format((time() - $tag) / ($ende - $tag) * 100, 0, ',', '\'');
					
					$swf_status = sectodays($ende - time());
				} elseif ($row->ende_vortschritt == 'Jede Woche') {
					if (date('w') == 0) $wochentag = 7;
					if (date('w') != 0) $wochentag = date('w');
					$tag = mktime(0, 0, 0, date('m'), (date('d') - $wochentag + 1), date('Y'));
					$ende = $tag + (7 * 24 * 60 * 60);
					$swf_prozent = number_format((time() - $tag) / ($ende - $tag) * 100, 0, ',', '\'');
					$swf_status = sectodays($ende - time());
				} elseif ($row->ende_vortschritt == 'Jeden Monat') {
					$tag = mktime(0, 0, 0, date('m'), 1, date('Y'));
					$ende = mktime(23, 59, 59, (date('m') + 1), 0, date('Y'));
					$swf_prozent = number_format((time() - $tag) / ($ende - $tag) * 100, 0, ',', '\'');
					$swf_status = sectodays($ende - time());
				} elseif ($row->ende_vortschritt == 'Jedes Jahr') {
					$wochentag = 365 - date('z');
					$tag = mktime(0, 0, 0, 1, 1, date('Y'));
					$ende = $tag + (365 * 24 * 60 * 60);
					$swf_prozent = number_format((time() - $tag) / ($ende - $tag) * 100, 0, ',', '\'');
					$swf_status = sectodays($ende - time());
				}
			} else {
				$swf_prozent = number_format(100 / $row->ende_punkte * $row->ende_punkte_aktuell, 2, ',', '\'');
				$swf_status = 'Es sind noch ' . ($row->ende_punkte - $row->ende_punkte_aktuell) . ' ' . $row->einheit . ' bis zum Ende';
			}
		}
		return '<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-valuenow="'. $swf_prozent .'" aria-valuemin="0" aria-valuemax="100" style="width: '. $swf_prozent .'%; color:black;">'. $swf_status .'</div>';
	}
}