<?php
if(isset($_POST['id'])){
	require_once("lib/schnittstellen/".$_POST['id'] .".php");
}

class ein_aus_zahlung{
	
	private $uid;
	private $betrag;
	private $pass;
	private $schnitt;
	private $m_konto;
	private $art;
	private $db;
	private $session = array();
	private $error = 0;
	private $meldung;
	private $array = array();
	
	function __construct(){
		global $datenbank,$_SESSION;
		$this->db = $datenbank;
		$this->session = $this->db->escape($_SESSION);
	}
	
	public function set_art($art){
		$this->art = $art;
	}
	
	public function set_uid($uid){
		if(!is_numeric($uid)){ $this->uid = 0; $error = 1;}else{ $this->uid = $uid;}
	}
	
	public function set_betrag($betrag){
		if(!is_numeric($betrag)){ $this->betrag = 0; $this->error = 1;}else{ $this->betrag = $betrag;}
	}
	
	public function set_pass($pass){
		$this->pass = $pass;
	}
	
	public function set_schnitt($id){
		$this->schnitt = $id;
	}
	
	public function auszahlen(){
		$array = $this->make_array();
		$this->kontostand($array['betrag']);
		$this->schnitt_erlaubt();
		$this->multi_konto();
		$this->schnitt_kont();
		if($this->error == 0){
			$this->zahlung();
		}
	}
	
	public function einzahlen($post){
		$array = $this->make_array($post);
		$this->kontostand($array['betrag']);
		$this->schnitt_erlaubt();
		$this->multi_konto();
		$this->schnitt_kont();
		if($this->error == 0){
			$this->zahlung();
		}
	}
	
	protected function zahlung(){
		global $k_buchung,$trans_ausgabe;
		
		$schnitt = $this->db->get_row("SELECT betreiber_id,betreiber_passwort,betreiber_kennung,auszahltext,einzahltext,punktewert,wertepunkt FROM ". PREFIX . SCHNITT ." WHERE schnittstelle = '$this->schnitt' ",true);
		if($this->art == 2){
			auszahlen ($schnitt->betreiber_id,$schnitt->betreiber_passwort,$this->m_konto,$this->pass,$schnitt->betreiber_kennung,$this->betrag /= $schnitt->punktewert ,$schnitt->auszahltext,'');
		}else{
			einzahlen($schnitt->betreiber_id,$schnitt->betreiber_passwort,$this->m_konto,$this->pass,$schnitt->betreiber_kennung,$this->betrag,$schnitt->einzahltext,'');
		}
		$this->db->insert(PREFIX . S_ANF , array("zeit" => time(), "uid" => $this->uid, "betrag" => $this->betrag, "art" => $this->art) );
		if($this->error == 0){
			if($this->art == 2){
				$k_buchung->set_var($this->uid,$this->betrag,'-',"Auszahlung");
				$this->meldung = AUSZAHLUNG_TRUE;
			}else{
				$k_buchung->set_var($this->uid,$this->betrag * $schnitt->wertepunkt,'+',"Einzahlung");
				$this->meldung = EINZAHLUNG_TRUE;
			}
		}else{
			$this->error = 1;
			$this->meldung = $trans_ausgabe;
		}
		meldung($this->error,$this->meldung);
	}
	
	private function schnitt_kont(){
		$schnitt = $this->db->get_row("SELECT auszahlsumme,einzahlsumme,anfragen_user FROM ". PREFIX . SCHNITT ." WHERE schnittstelle = '$this->schnitt' ",true);
		if($schnitt->anfragen_user != 0){ $error = 1; $meldung .= AUSZAHLUNG_ANFRAGEN_USER_FALSE;}
		if($this->art == 2){
			if($schnitt->auszahlsumme != 0){ if($schnitt->auszahlsumme > $this->betrag){ $this->error = 1; $this->meldung .= AUSZAHLUNG_BETRAG_HIGHT;}}
		}else{
			if($schnitt->einzahlsumme != 0){ if($schnitt->einzahlsumme > $this->betrag){ $this->error = 1; $this->meldung .= EINZAHLUNG_BETRAG_HIGHT;}}
		}
		meldung($this->error,$this->meldung);
	}
	
	private function multi_konto(){
		$results = $this->db->get_results("SELECT kontoid FROM ". PREFIX . MULTIK ." WHERE uid='$this->uid' AND waehrung='$this->schnitt' LIMIT 1 ");
		if(count((array)$results) != 1){
			$this->error = 1; $this->meldung .= AUSZAHLUNG_MULTI_KONTO_FALSE;
		}else{
			$this->m_konto = $results->{1}->kontoid;
		}
		meldung($this->error,$this->meldung);
	}
	
	private function schnitt_erlaubt(){
		$stelle = $this->db->get_row("SELECT aktiv_aus FROM ". PREFIX . SCHNITT ." WHERE schnittstelle = '$this->schnitt' ",true);
		if($stelle->aktiv_aus != 1){ $this->error = 1; $this->meldung .= AUSZAHLUNG_SCHNITT_STELLE_FALSE;}
		meldung($this->error,$this->meldung);
	}
	
	private function kontostand($betrag){
		$konto = $this->db->get_row("SELECT kontostand_a,auszahlung_sperre FROM ". PREFIX . KONTO . " WHERE uid = '$this->uid' ",true);
		if($konto->kontostand_a < $betrag){ $this->error = 1; $this->meldung .= AUSZAHLUNG_KONTO_FALSE;}
		if($konto->auszahlung_sperre == 1){ $this->error = 1; $this->meldung .= AUSZAHLUNG_SPERRE_TRUE;}
		meldung($this->error,$this->meldung);
	}
	
	private function make_array($post){
		foreach($_POST AS $key => $value){
			if($key != 'auszahlen' && $key != '' && $key != 'veri'){
				$this->array[$key] = $this->db->escape($value);
			}
		}
	}
	
	public function veri($post){
		$this->make_array($post);
		$row = $this->db->get_row("SELECT * FROM " . PREFIX . SCHNITT . " WHERE schnittstelle='" . $this->array['schnittstelle'] . "' AND aktiv > 0 LIMIT 1",true);
		// User beim Betreiber prüfen
		$this->db->insert(PREFIX . SCHNITTA, array("zeit" => time(), "uid" => $this->session['uid']));
		require_once ("lib/schnittstellen/" . $row->schnittstelle . ".php");
		uservalidate($row->betreiber_id, $row->betreiber_passwort, $this->array['veri_id'], $this->array['veri_pw']);
		$error = $trans_ausgabe;
		if (!$error){
			$datenbank->insert(PREFIX . MK ,array("uid" => $this->session['uid'], "kontoid" => $this->db->escape($this->array['veri_id']),"waehrung" => $this->db->escape($this->array['schnittstelle'])));
			meldung(0,MK_SAVE_TRUE);
		}else{
			meldung(1,MK_SAVE_FALSE.$error);
		}
	}
		
}