<?php

    // VendorIDs der verschiedenen Anbieter
    define('BUERGEL_VENDORID', 1);
    define('SCORE_SOURCE_KUNDENSTAMM', 1);
    define('SCORE_SOURCE_API', 2);
    
    function ResetKundenZahlungsart($KundenID) {
        
        $SQLString = 'UPDATE ' . TABLE_KUNDEN . ' SET ';
        $SQLString .= TABLE_KUNDEN . '. zahlungsart = 0 ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_KUNDEN . '.id = \'' . $KundenID . '\' ';
        
//        echo '$SQLString: ' . $SQLString . '<br>';
        
        errorlogged_mysql_query($SQLString);
    
    }

    function CheckBonitaetspruefung($ZahlungsartID, $KundenID) {
        
        $BonitaetspruefungEinstellungen = GetEinstellungen('', 'bonitaetspruefung');
        $ZahlungsartObject = GetZahlungsartDetail($ZahlungsartID);
        
        if ($_SESSION["gast_mail"]) {
            $KundenObject = GetKundenDetail();
        } else {
            $KundenObject = GetKundenDetail("", $KundenID);
        }
        
        // Score ermitteln
        if ($KundenObject->bonitaetspruefung_last_check && ((strtotime($KundenObject->bonitaetspruefung_last_check) + ($BonitaetspruefungEinstellungen->bonitaetspruefung->buergel_pruefungszyklus * (24 * 60 * 60))) > time())) {

            $ScoreResult['bonitaetspruefung_score'] = $KundenObject->bonitaetspruefung_last_score;
            $ScoreResult['bonitaetspruefung_source'] = SCORE_SOURCE_KUNDENSTAMM;
            $ScoreResult['bonitaetspruefung_date'] = $KundenObject->bonitaetspruefung_last_date;

        } else {
            
            $ScoreResult = GetScore($ZahlungsartObject->bonitaetspruefung_vendor_id, $KundenID, $KundenObject->vorname, $KundenObject->nachname, $KundenObject->strasse, $KundenObject->hausnummer, $KundenObject->plz, $KundenObject->ort, $KundenObject->land, $KundenObject->email, $KundenObject->telefon);
            
            if (!$ScoreResult['bonitaetspruefung_api_error']) {
                SaveKundenScore($KundenID, $ScoreResult['bonitaetspruefung_score']);
            }
            
        }
        
        // Zahlungsart zulässig
        if (($ScoreResult['bonitaetspruefung_score'] <= $ZahlungsartObject->bonitaetspruefung_score) && (!$ScoreResult['bonitaetspruefung_api_error'])) {
            
            $CheckBonitaetspruefungResult['bonitaetspruefung'] = true;
            $CheckBonitaetspruefungResult['bonitaetspruefung_message'] = '';
            
        } else {
            
            $CheckBonitaetspruefungResult['bonitaetspruefung'] = false;
            $CheckBonitaetspruefungResult['bonitaetspruefung_message'] = $ZahlungsartObject->bonitaetspruefung_ablehnungstext;
            
        }
        
        return $CheckBonitaetspruefungResult;
        
    }

    function SaveKundenScore($KundenID, $Score) {
                    
        $SQLString = 'UPDATE ' . TABLE_KUNDEN . ' SET ';
        $SQLString .= TABLE_KUNDEN . '.bonitaetspruefung_last_check = NOW(), ';
        $SQLString .= TABLE_KUNDEN . '.bonitaetspruefung_last_score = \'' . $Score . '\' ';
        $SQLString .= 'WHERE ';
        $SQLString .= TABLE_KUNDEN . '.id = \'' . $KundenID . '\' ';
        
//        echo '$SQLString: ' . $SQLString . '<br>';
        
        errorlogged_mysql_query($SQLString);
        
    }
    
    function GetBonitaetspruefung($VendorID, $Vorname, $Nachname, $Strasse, $Hausnummer, $PLZ, $Ort, $LandISOCode, $Email, $Telefon) {
        
        switch ($VendorID) {
            
            case ($VendorID == BUERGEL_VENDORID):
                
                $BonitaetspruefungResult = GetBonitaetspruefungBuergel($Vorname, $Nachname, $Strasse, $Hausnummer, $PLZ, $Ort, $LandISOCode, $Email, $Telefon);
                
            break;
            
        }
        
        return $BonitaetspruefungResult;
        
    }

    function GetScore($VendorID, $KundenID, $Vorname, $Nachname, $Strasse, $Hausnummer, $PLZ, $Ort, $LandID, $Email, $Telefon) {
        
//        echo '$VendorID: ' . $VendorID . '<br>';
//        echo '$KundenID: ' . $KundenID . '<br>';
//        echo '$Vorname: ' . $Vorname . '<br>';
//        echo '$Nachname: ' . $Nachname . '<br>';
//        echo '$Strasse: ' . $Strasse . '<br>';
//        echo '$Hausnummer: ' . $Hausnummer . '<br>';
//        echo '$PLZ: ' . $PLZ . '<br>';
//        echo '$Ort: ' . $Ort . '<br>';
//        echo '$LandID: ' . $LandID . '<br>';
//        echo '$Email: ' . $Email . '<br>';
//        echo '$Telefon: ' . $Telefon . '<br>';
        
        // Einstellungen einlesen
        $Einstellungen = GetEinstellungen('', 'bonitaetspruefung');
        
        // ********************************************************************************
        // ** Bürgel 
        // ********************************************************************************
        if ($VendorID == BUERGEL_VENDORID) {
        
            $LandObject = GetLandDetails($LandID);
            
            // Parameter
            $API_Kundennummer = $Einstellungen->bonitaetspruefung->buergel_kundennummer;
            $API_Userid = $Einstellungen->bonitaetspruefung->buergel_benutzername;
            $API_Passwort = $Einstellungen->bonitaetspruefung->buergel_passwort;
            
            $API_HEADER_ID = 'E001'; 
            $API_HEADER_VERSION = '01'; 
            $API_SYSTEM_CODE = 'BAS'; 
            $API_KOMM_METHODE = 'TS'; 
            $API_FRAME_LAENGE = '00000'; 
             
            $API_GP_ID = 'C55QN01'; 
            $API_KNDNR = $API_Kundennummer; 
            $API_RETCODE = '00000000'; 
            $API_RETTMS = '0000-00-00-00.00.00.000000'; 
            $API_TRANSFNK = 'AN'; 
            $API_USERID = $API_Userid; 
            $API_SEGMENTNAME = 'C55QN01'; 
            $API_SEGMENTVERSION = '0204'; 
            $API_SEGMENTLAENGE = '00000'; 
            $API_DIALOGSPRACHE = '01'; 
            $API_XML_MARKUP_KZ = '01'; 
            
            $API_PRODUKT_NR = '0040';
            $API_VERSANDART = '0006';
            $API_ANF_ART = '0070';
            $API_LIEFERSPRACHE = '0001';
            $API_ANF_GRUND = '0003';
            
            $API_VORNAME = $Vorname;
            $API_NAME1 = $Nachname;
            $API_STRASSE = $Strasse;
            $API_HAUS_NR = $Hausnummer;
            $API_PLZ = $PLZ;
            $API_ORT = $Ort;
            $API_STAAT = $LandObject->isocode_3166;
            $API_TELEFON_NR = $Telefon;
            $API_EMAIL_ADRESSE = $Email;
            
            $XMLString = simplexml_load_string('<?xml version="1.0" encoding="iso-8859-1"?><BWIDATA></BWIDATA>');
    
            $XMLString->addChild('HEADER');
            $XMLString->HEADER->addChild('HEADER_ID', $API_HEADER_ID);
            $XMLString->HEADER->addChild('HEADER_VERSION', $API_HEADER_VERSION);
            $XMLString->HEADER->addChild('SYSTEM_CODE', $API_SYSTEM_CODE);
            $XMLString->HEADER->addChild('KOMM_METHODE', $API_KOMM_METHODE);
            $XMLString->HEADER->addChild('FRAME_LAENGE', $API_FRAME_LAENGE);
            $XMLString->HEADER->addChild('GP_ID', $API_GP_ID);
            $XMLString->HEADER->addChild('KNDNR', $API_KNDNR);
            $XMLString->HEADER->addChild('RETCODE', $API_RETCODE);
            $XMLString->HEADER->addChild('RETTMS', $API_RETTMS);
            $XMLString->HEADER->addChild('TRANSFNK', $API_TRANSFNK);
            $XMLString->HEADER->addChild('USERID', $API_USERID);
            $XMLString->HEADER->addChild('SEGMENTNAME', $API_SEGMENTNAME);
            $XMLString->HEADER->addChild('SEGMENTVERSION', $API_SEGMENTVERSION);
            $XMLString->HEADER->addChild('SEGMENTLAENGE', $API_SEGMENTLAENGE);
            $XMLString->HEADER->addChild('DIALOGSPRACHE', $API_DIALOGSPRACHE);
    
            $XMLString->addChild('C55QN01');
            $XMLString->C55QN01->addChild('PRODUKT_NR', $API_PRODUKT_NR);
            $XMLString->C55QN01->addChild('VERSANDART', $API_VERSANDART);
            $XMLString->C55QN01->addChild('ANF_ART', $API_ANF_ART);
            $XMLString->C55QN01->addChild('LIEFERSPRACHE', $API_LIEFERSPRACHE);
            $XMLString->C55QN01->addChild('VORNAME', $API_VORNAME);
            $XMLString->C55QN01->addChild('NAME1', $API_NAME1);
            $XMLString->C55QN01->addChild('STRASSE', $API_STRASSE);
            $XMLString->C55QN01->addChild('HAUS_NR', $API_HAUS_NR);
            $XMLString->C55QN01->addChild('PLZ', $API_PLZ);
            $XMLString->C55QN01->addChild('ORT', $API_ORT);
            $XMLString->C55QN01->addChild('STAAT', $API_STAAT);
            $XMLString->C55QN01->addChild('ANF_GRUND', $API_ANF_GRUND);
            
            $API_FRAME_LAENGE = strlen($XMLString->HEADER->asXML()) + strlen($XMLString->C55QN01->asXML());
            $API_SEGMENTLAENGE = strlen($XMLString->C55QN01->asXML());
            
            $XMLString->HEADER->FRAME_LAENGE = sprintf("%05d", $API_FRAME_LAENGE);
            $XMLString->HEADER->SEGMENTLAENGE = sprintf("%05d", $API_SEGMENTLAENGE);
            
//            echo '<pre>';
//            var_dump($XMLString);
//            echo '</pre>';
            
            $PostData = 'eing_dat=' . $XMLString->asXML();
            
            $API_URL = 'http://www.buergel-online.de/rcs/xml.jsp';
//            $API_URL = 'http://www.buergel-online.de/rcstest/xml.jsp';
            
//            echo '$API_URL: ' . $API_URL . '<br>';
            
            // per Curl die DocumentInfo einlesen
            $CurlHandler = curl_init();
            
            curl_setopt($CurlHandler, CURLOPT_URL, $API_URL);
            curl_setopt($CurlHandler, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
            curl_setopt($CurlHandler, CURLOPT_POST, 1);
            curl_setopt($CurlHandler, CURLOPT_POSTFIELDS, $PostData);
            curl_setopt($CurlHandler, CURLOPT_USERPWD, $API_Userid . ':' . $API_Passwort);
            curl_setopt($CurlHandler, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($CurlHandler, CURLOPT_SSL_VERIFYPEER, FALSE);
                    
            $ReturnString = curl_exec($CurlHandler);
    
            $ReturnXMLString = simplexml_load_string($ReturnString);
            
//            echo '<pre>';
//            var_dump($ReturnString);
//            var_dump($ReturnXMLString);
//            echo '</pre>';
            
            curl_close($CurlHandler);
            
            // Log
            $FileDatum = date('d_m_y_H_i_s');
            $LogFilenameAnfrage = $FileDatum . '_' . sprintf('%05d', $KundenID) . '_anfrage.xml';
            $LogFilenameAntwort = $FileDatum . '_' . sprintf('%05d', $KundenID) . '_antwort.xml';
            
            if(!file_exists(DATEIPFAD . 'admin/data/logs/schnittstellen/')) {
                mkdir(DATEIPFAD . 'admin/data/logs/schnittstellen/', 0777, TRUE);
            }
            
            if(!file_exists(DATEIPFAD . 'admin/data/logs/schnittstellen/buergel/')) {
                mkdir(DATEIPFAD . 'admin/data/logs/schnittstellen/buergel/', 0777, TRUE);
            }
            
            $FileHandler = fopen(DATEIPFAD . "admin/data/logs/schnittstellen/buergel/" . $LogFilenameAnfrage, 'a');
            fwrite($FileHandler, $XMLString->asXML());
            fclose($FileHandler);
            
            $FileHandler = fopen(DATEIPFAD . "admin/data/logs/schnittstellen/buergel/" . $LogFilenameAntwort, 'a');
            fwrite($FileHandler, $ReturnString);
            fclose($FileHandler);
            
            if ($ReturnXMLString->C55QN54->FEHLER-HINWEISTEXT || !$ReturnXMLString->C55QN54->SCORE_WERT) {
                $APIError = true;
            } else {
                $APIError = false;
            }
            
            if ((int)$ReturnXMLString->C55QN54->SCORE_WERT == 0) {
                $ReturnXMLString->C55QN54->SCORE_WERT = 100;
            }
            
            $ScoreResult['bonitaetspruefung_api_error'] = $APIError;
            $ScoreResult['bonitaetspruefung_score'] = (int)$ReturnXMLString->C55QN54->SCORE_WERT / 10;
            $ScoreResult['bonitaetspruefung_source'] = SCORE_SOURCE_API;
            $ScoreResult['bonitaetspruefung_date'] = date('Y.m.d H:i:s');

//            echo '<pre>';
//            var_dump($ScoreResult);
//            echo '</pre>';
        
        }
            
        return $ScoreResult;
        
    }
