<?php

namespace App\Helper;

use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;


class Hiltes
{
	// init file system
	protected $fsObject;
	protected $current_dir_path;
	protected $apiKey;
	protected $hiltesApiHash = '';
	protected $hiltesUsr;
	protected $hiltesPass;
	protected $hiltesApiUrl;

  public function __construct()
  {
    $this->fsObject = new Filesystem();
    $this->current_dir_path = getcwd();


    $this->hiltesApiUrl = $_ENV['HILTES_API_URL'];
    $this->hiltesUsr = $_ENV['HILTES_API_USER'];
    $this->hiltesPass = $_ENV['HILTES_API_PASSWORD'];
  }


  /**
   * Aufbau des Dateinamens:
   * WU + Datum(TTMM) + Fortlaufendenummer (x2) + “.“ +Filialnummer(x4)
   * Beispieldateiname : WU220401.0001
   */
  public function createFileName() :String
  {
    $date = date('dm');
    $number = '01';
    $filial = '0001';
    return 'WU'.$date.$number.'.'.$filial;
  }


  public function import()
  {

      $finder = new Finder();
      $finder->files()->in($this->current_dir_path . "/hiltes/h2c/");

      foreach ($finder as $file) {
          $contents = $file->getContents();

          var_dump($contents);
      }

  }

	/**
	* @param string $data
	* @return void
	*/
	public function export(string $data)
	{
		try {
      $new_file_path = $this->current_dir_path . "/hiltes/c2h/".$this->createFileName();

      if (!$this->fsObject->exists($new_file_path))
      {
        $this->fsObject->touch($new_file_path);
        $this->fsObject->chmod($new_file_path, 0777);
        $this->fsObject->dumpFile($new_file_path, $data);
      }
    } catch (IOExceptionInterface $exception) {
      echo "Error creating file at". $exception->getPath();
    }
  }

  public function checkData($data)
  {
        $umsatz = [
            'EtikettKz' => 'E',                             // E = EAN, I = Ident, W = Warengruppe
            'Etikettnummer'=> $data['sku'],                       // mit führenden Nullen bei Satzart „W“ die Warengruppennummer
            'Warengruppennummer'=> '0000',                  // mit führenden Nullen
            'Groessenbez'=> '',
            'Kundennummer'=> '00000000000000000000',
            'Nachlassart'=> '0',
            'Menge'=> '00000000000000000000',               //7 Vor – und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen).
            'Kalk-VkPreis'=> '00000000000000000000',        //7 Vor – und 2 Nachkommastellen (Darstellung ohne Komma mit führenden Nullen).
            'Vorgangsart'=> 'v',                            // u = Umtausch, v = Verkauf
            'Belegnummer'=> '00000000000000000000',         // mit führenden Nullen
            'Verkaufsdatum'=> '00000000',                   // YYYYMMTT
            'Verkaufszeit'=> '000000',                      // HHMM
            'Zahlungsart'=>2,                               // 1 = Kreditkarte, 2 = Rechnung, 3 = Lastschrift, 4 = Gutschein, 5 = Gutschrift, 6 = Mischzahlung
            'Währung'=> 'EUR',                              // EUR
            'Einheit'=> 'S',                                 // S= Stück, M = Meter
            'Vertriebskanal'=> '0000',                      // Vertriebskanäle werden über das Stammdatenprogramm angelegt und müssen mit der hinterlegten Nummer aus dem Webshop übergeben werden
        ];

        $kunde = [
            'Kunden-Nummer'=> '00000000000000000000',       // mit führenden Nullen
            'Kartennummer'=> '00000000000000000000',        // mit führenden Nullen
            'Nachname'=> '00000000000000000000',          // mit führenden Nullen
            'Vorname'=> '00000000000000000000',           // mit führenden Nullen
            'Ort'=> '00000000000000000000',               // mit führenden Nullen
            'PLZ'=> '00000000000000000000',               // mit führenden Nullen
            'Straße'=> '00000000000000000000',           // mit führenden Nullen
            'Land'=> '00000000000000000000',              // mit führenden Nullen
            'Postfach'=> '00000000000000000000',          // mit führenden Nullen
            'PostfachPLZ'=> '00000000000000000000',       // mit führenden Nullen
            'Titel'=> '00000000000000000000',             // mit führenden Nullen
            'Telefon1'=> '00000000000000000000',          // mit führenden Nullen
            'Telefon2'=> '00000000000000000000',          // mit führenden Nullen
            'Telefax'=> '00000000000000000000',           // mit führenden Nullen
            'Geburtsdatum'=> '00000000',                  // YYYYMMDD
            'Geschlecht'=> '00000000000000000000',        // s = sonstiges, m = männlich, w = weiblich
            'Email'=> '00000000000000000000',             // mit führenden Nullen
            'Rabatt'=> '00000000000000000000',            // mit führenden Nullen
            'Limit'=> '00000000000000000000',             // mit führenden Nullen
            'Sperr Kennzeichen'=> '0',                    // 0 = nicht gesperrt, 1 = gesperrt
            'Dubios Kennzeichen'=> '0',                   // 0 = nicht dubios, 1 = dubios
            'Bankeinzug'=> '0',                           // 0 = kein Bankeinzug, 1 = Bankeinzug
            'BankName1'=> '00000000000000000000',         // mit führenden Nullen
            'Konto1'=> '00000000000000000000',            // mit führenden Nullen
            'BLZ1'=> '00000000000000000000',              // mit führenden Nullen
            'BankName2'=> '00000000000000000000',         // mit führenden Nullen
            'Konto2'=> '00000000000000000000',            // mit führenden Nullen
            'BLZ2'=> '00000000000000000000',              // mit führenden Nullen
            'BankName3'=> '00000000000000000000',         // mit führenden Nullen
            'Konto3'=> '00000000000000000000',            // mit führenden Nullen
            'BLZ3'=> '00000000000000000000',              // mit führenden Nullen
            'Kreditkartennummer Kreditkarte1'=> '',       // mit führenden Nullen
            'Kreditkartennummer Kreditkarte2'=> '',       // mit führenden Nullen
            'Kreditkartennummer Kreditkarte3'=> '',       // mit führenden Nullen
            'Kreditkartennummer Kreditkarte4'=> '',       // mit führenden Nullen
            'Änderungskennzeichen'=> '0',                 // 0 = Kunde ist OK, 1 = Änderung
            'Newsletter'=> '0',                           // 0 = kein Newsletter, 1 = Newsletter
            'Passwort'=> '',                              //
            'Werbesperre'=> '0',                          // 0 = keine Werbung, 1 = Werbung
        ];
  }
	public function createJson($data){
		$arr = array(
			'File' => array(
				"BranchNumber" => $data['BranchNumber'], #Die Filialnummer
				"ShopNumber" => $data['ShopNumber'], #Die Shopnummer
				"SalesDate" => $data['SalesDate'], #Das Umsatzdatu
				"DistributionChannel" => $data['DistributionChannel'] #Der Vertriebskanal
			),
			'SaleList'	=> array(
			),
			'CustomerList'	=> array(
			),
		);
		#*** Sale List
		if(!empty($data['SaleList'])){
			foreach ($data['SaleList'] as $v){
				$arr['SaleList'][] = array(
					"SalesLabel" => $v['SalesLabel'], #Das Etikettkennzeichen
					"SalesLabelNumber" => $v['SalesLabelNumber'], #Etikettennummer
					"SalesGoodsGroupNumber" => $v['SalesGoodsGroupNumber'],
					#"SizeDescription" => $v['SizeDescription'],
					#"CustomerNumber" => $v['CustomerNumber'],
					#"TypeOfEstate" => $v['TypeOfEstate'],
					"Amount" => $v['Amount'],
					"CalculatedSellingPrice" => $v['CalculatedSellingPrice'],
					"AchievedSalesPrice" => $v['AchievedSalesPrice'],
					"TransactionType" => $v['TransactionType'],
					#"ReceiptNumber" => $v['ReceiptNumber'],
					"DateOfSale" => $data['SalesDate'],#"2023-09-14T11:54:26.708Z",
					"PaymentMethod" => $v['PaymentMethod'],
					"Currency" => $v['Currency'],
					"Unit" => $v['Unit'],
					"DistributionChannel" => $v['DistributionChannel']
				);
			}
		}
		#*** Sale List
		if(true){
			foreach ($data['CustomerList'] as $v){
				$arr['CustomerList'][] = array(
					"CustomerNumber" => $v['CustomerNumber'],
					#"CardNumber" => $v['CardNumber'],
					#"SalutionNumber" => $v['SalutionNumber'],
					"Surname" => $v['Surname'],
					"Forename" => $v['Forename'],
					"AddressCity" => $v['AddressCity'],
					"AddressZipCode" => $v['AddressZipCode'],
					"AddressStreet" => $v['AddressStreet'],
					"AddressCountry" => $v['AddressCountry'],
					#"PostOfficeBox" => $v['PostOfficeBox'],
					#"PostOfficeBoxZipCode" => $v['PostOfficeBoxZipCode'],
					#"Title" => $v['Title'],
					#"PhoneNumber1" => $v['PhoneNumber1'],
					#"PhoneNumber2" => $v['PhoneNumber2'],
					#"FaxNumber" => $v['FaxNumber'],#"string",
					#"BirthDay" => $v['BirthDay'],
					#"Gender" => $v['Gender'],
					#"EmailAddress" => $v['EmailAddress'],
					#"Discount" => $v['Discount'],
					#"Limit" => $v['Limit'],
					#"LockMark" => $v['LockMark'],
					#"DubiousMark" => $v['DubiousMark'],
					#"DubiousText" => $v['DubiousText'],
					#"DirectDebit" => $v['DirectDebit'],
					#"BankName1" => $v['BankName1'],#"string",
					#"BankAccountNumber1" => $v['BankAccountNumber1'],#"string",
					#"BankCodeNumber1" => $v['BankCodeNumber1'],#"string",
					#"BankName2" => $v['BankName2'],#"string",
					#"BankAccountNumber2" => $v['BankAccountNumber2'],#"string",
					#"BankCodeNumber2" => $v['BankCodeNumber2'],#"string",
					#"BankName3" => $v['BankName3'],#"string",
					#"BankAccountNumber3" => $v['BankAccountNumber3'],#"string",
					#"BankCodeNumber3" => $v['BankCodeNumber3'],#"string",
					#"CreditcardNumber1" => $v['CreditcardNumber1'],#"string",
					#"CreditcardNumber2" => $v['CreditcardNumber2'],#"string",
					#"CreditcardNumber3" => $v['CreditcardNumber3'],#"string",
					#"CreditcardNumber4" => $v['CreditcardNumber4'],#"string",
					#"ChangeIndicator" => $v['ChangeIndicator'],
					#"Newsletter" => $v['Newsletter'],
					#"Password" => $v['Password'],
					#"AdBan" => $v['AdBan']
				);
			}
		}
		#dump($arr);
		return $arr;
	}
	public function sendToHiltes($url,$param,$auth=false){
		if($auth){
			#var_export($this->hiltesApiHash);
			#var_export($url);
			#var_export($param);

		}

		$ch = curl_init($url);
		if($auth){
			$authorization = "Authorization: Bearer ".$this->hiltesApiHash;
		}else{
			$authorization = false;
		}
#dump($param);
# Setup request to send json via POST.
		$payload = json_encode( $param );
#dump($payload);
		curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json',$authorization));
		curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
# Return response instead of printing.
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
# Send request.
		$result = curl_exec($ch);
		curl_close($ch);
		return $result;
	}
	public function loginToHiltes($usr,$pass){
		$url = $this->hiltesApiUrl.'/api/Authentication/authenticate';
		/*
		{
			"Username": "string",
  			"Password": "string"
		}
		*/
		$param = array(
			'Username' => (!empty($usr) ? $usr : $this->hiltesUsr),
			'Password' => (!empty($pass) ? $pass : $this->hiltesPass),
#			'parse_mode' => 'html',
#			'disable_notification' => $disable_notification,
#			'text' => $message_text
		);
		$r = $this->sendToHiltes($url,$param);
		$t = json_decode($r,true);
		if($t['Success']){
			$this->hiltesApiHash = $t['Data'];
			return true;
		}else{
			dump($r);
			dump('Login Error '.__LINE__);
			return false;
		}
	}
	public function sendOrderToHiltes($data){
		$url = $this->hiltesApiUrl.'/api/WebSale/import';
		/*
		{
			"Username": "string",
  			"Password": "string"
		}
		*/
		$param = $data;
		dump($param);
		$r = $this->sendToHiltes($url,$param,true);
		$t = json_decode($r,true);
		if($t['Success']){
			$this->hiltesApiHash = $t['Data'];
		}else{
			dump($r);
			dd('Submit Error'.__LINE__);
		}
	}

}