<?php
    //echo 'skljep';
    
    $_formatFields['module_shop']=array(
        'modShpShipments' => array(      
        'type' => 'array_fields')
    );    
                                                   
    function update_cart_totals($module) {

        $new_total_items=0;
        $new_total_products=count($_SESSION['cart'][$module['modName']]['items']);
        $new_total_price_netto=0;
        $new_total_price_brutto=0;        
        //echo '<pre>';
		//print_r($_SESSION['cart']);
        foreach($_SESSION['cart'][$module['modName']]['items'] as $key=>$item) {        
            $new_total_items+=$item['amount'];
            $new_total_price_netto+=$item[$module['modShpFieldNetto']]*$item['amount'];
            $new_total_price_brutto+=$item[$module['modShpFieldBrutto']]*$item['amount'];            
        }
        $_SESSION['cart'][$module['modName']]['total_items']=$new_total_items;
        $_SESSION['cart'][$module['modName']]['total_products']=$new_total_products;
        $_SESSION['cart'][$module['modName']]['total_price_netto']=$new_total_price_netto;        
        $_SESSION['cart'][$module['modName']]['total_price_brutto']=$new_total_price_brutto; 
        
     
    }
    
    
    function run_module_shop($module) {
        global $db, $cfg, $_url, $module_settings;

         /*
        $or_sql='';
        $products_table=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='".$module['modShpProductsTable']."'"));      
        foreach($module['modShpShipments'] as $key=>$item) {                    
            $or_sql.=$products_table['tabPrefix']."Id='".$item['modShpShipment']."' OR ";                    
        }  
        $res=mysqli_query($db, "SELECT * FROM ".$module['modShpProductsTable']." WHERE ".substr($or_sql,0,-4));
        $details=null;
        while($rek=mysqli_fetch_assoc($res)) {
            $rek['modShpShipmentNetto']=$rek[$module['modShpFieldNetto']];
            $rek['modShpShipmentVAT']=$rek[$module['modShpFieldVAT']]; 
            $rek['modShpShipmentBrutto']=$rek[$module['modShpFieldBrutto']];                          
            $details[$rek[$products_table['tabPrefix']."Id"]]=$rek;
        }       
        foreach($module['modShpShipments'] as $key=>$item) {
            $module['modShpShipments'][$key]=array_merge($item, $details[$item['modShpShipment']]);   
        }
        $ret['shipments']=$module['modShpShipments'];   
           */
        
            

        if($_POST['module']==$module['modName'] || $_GET['module']==$module['modName']) {  
            $products_table=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='".$module['modShpProductsTable']."'"));
            //print_r($products_table);
                 
            // rejestracja 
            if($_POST['action']=='shop_add_to_cart') {
                //$idf=table2prefix($module['modShpProductsTable']);
                //print_r($_POST);
                //exit;
                $product=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM ".$products_table['tabName']." WHERE `".$products_table['tabPrefix']."Id`='".$_POST['id']."'"));
                foreach($product as $key=>$item) {
                    if(is_json($item)) $product[$key]=json_decode($item, true);
                    if(count(explode('@',$key))>1) {
                        $exp=explode('@', $key);
                        if($exp[1]==$_SESSION['language']) {
                            $product[$exp[0]]=$item;
                            unset($product[$key]);
                        } else {
                            unset($product[$key]);
                        }                 
                    }

                }
                if($module['modShpFieldAttrGroups'] && $module['modShpFieldAttributes']) {
                    $prefix=$products_table['tabPrefix'];

                    //exit;   
                    if($product[$module['modShpFieldAttrGroups']]!=null) {       
					
                        foreach((array)$product[$module['modShpFieldAttrGroups']] as $key=>$item) {
							//print_r($item);
                            //echo 'x';
                            $product['attributes'][$item[$products_table['tabPrefix'].'#attg_name']]=$_POST[$item[$products_table['tabPrefix'].'#attg_name']];

                            $attr=$product[$module['modShpFieldAttributes']][$_POST[$item[$products_table['tabPrefix'].'#attg_name']]];
                            //print_r($attr); 
                            switch($attr[$prefix.'#attr_price_impact_mode']) {
                                case 'price_substract':
                                    $product[$module['modShpFieldBrutto']]-=$attr[$prefix.'#attr_price_value'];                          
                                break;
                                case 'price_add':
                                    $product[$module['modShpFieldBrutto']]+=$attr[$prefix.'#attr_price_value'];                          
                                break;                            
                            }                            
                        }
                    }
                    $product[$module['modShpFieldNetto']]=round($product[$module['modShpFieldBrutto']]/($product[$module['modShpFieldVAT']]/100+1),2);

                    
                }

               //$producent=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table_producenci WHERE prodId='".$product['prd#producent']."'"));
                //print_r($producent);
                //$product['producent']=$producent['prod#nazwa'];
                //print_r($product);
                //exit;
               $fnd=-1;
			   //echo '<pre>';
			   //print_r($product);
			   //echo "\n\n\n\n\n\n\n\n\n";
			   //print_r($_SESSION['cart'][$module['modName']]['items']);
			   //exit;
                foreach((array)$_SESSION['cart'][$module['modName']]['items'] as $key=>$item) {
                    //echo '<pre>';
                    //print_r($item);
                    //print_r($product);
                    //echo '<br/><br/><br/>';
                    if($product['attributes'] && $item['attributes']) {
                        $tst=array_diff_key($item['attributes'], $product['attributes']);
						$tst2=array_diff($item['attributes'], $product['attributes']);
						//print_r($item['attributes']);
						//print_r($product['attributes']);
						//print_r($tst);
						
						//echo $tst;
						//exit;
                        if(!$tst && !$tst2) $fnd=$key; 				
                    } else {
                        if($item[$prefix.'Id']==$product[$prefix.'Id']) {
                            $fnd=$key;
                        }  
                    }
                    
                                  
                }
				//exit;
                if($fnd<0) {
                    $product['amount']=$_POST['amount'];                
                    $_SESSION['cart'][$module['modName']]['items'][]=$product;
                } else {
                    if($_POST['reset_amount']) {
                        $_SESSION['cart'][$module['modName']]['items'][$fnd]['amount']=$_POST['amount'];    
                    } else {
                        $_SESSION['cart'][$module['modName']]['items'][$fnd]['amount']+=$_POST['amount'];  
                    }
                }


                update_cart_totals($module);
                if($_POST['ajax']) {
                    echo 'product_added';
                    exit;
                }

                //print_r($_POST);          
            }
            
            
            
            //zmiana ilosci w koszyku
            if($_POST['action']=='shop_set_cart_amounts') {
                foreach($_POST['amount'] as $key=>$item) {
                    if($_SESSION['cart'][$module['modName']]['items'][$key]) {
                        $_SESSION['cart'][$module['modName']]['items'][$key]['amount']=$item;
                    }    
                }
                update_cart_totals($module);
            }
            
            
            
            //usuwanie produktu
            if($_GET['action']=='shop_remove_from_cart') {
                unset($_SESSION['cart'][$module['modName']]['items'][$_GET['id']]);  
                update_cart_totals($module);                          
                Header('Location: /'.implode('/', $_url));
                exit;
            }
            
            
            
            //tworzenie zamowienia
            if($_POST['action']=='shop_make_order') {
                for($i=3; $i<=6; $i++) {
                    $spad[$i]=str_pad($module['modShpCurrentOrderNumber'],$i,'0',STR_PAD_LEFT);
                }
                //echo 'keć!';
                $xf_fields=null;
                $xf_values=null;                
                foreach(json_decode($module['modShpXFValidators'],true) as $key=>$item) {
                    $valtab[$item['modShpXFValidKey']]['mode']=$item['modShpXFValidMode'];
                    if(strpos($item['modShpXFValidAttributes'], ';required;')!==false) {
                        $valtab[$item['modShpXFValidKey']]['required']=true;
                    }    
                    $valtab[$item['modShpXFValidKey']]['min']=$item['modShpXFValidMin'];   
                    $valtab[$item['modShpXFValidKey']]['max']=$item['modShpXFValidMax'];
                    $xf_fields.=", `".$item['modShpXFField']."`";
                    $xf_values.=", '".$_POST[$item['modShpXFValidKey']]."'";
                                                                          
                }
                
                if($_POST['fakpar']=='paragon') {
                    foreach($valtab as $key=>$item) {
                       
                        if(substr($key, 0, 5)=='bill_') {
                            //echo 'a';
                            unset($valtab[$key]);
                        }
                    }
                }

                
                //echo $xf_fields.'<br/>'.$xf_values;
                //exit;
    
                $validation=validator($_POST, $valtab);
                if($validation) {
                    $ret['shop_make_order']['validation']=$validation;
                    $ret['error']='validation';
                    //$ret['shop_make_order']='error';
                } else {
                
                    if(!$module['modShpShipments'][$_POST['shipment']] && $_SESSION['cart'][$module['modName']]['total_price_brutto']<$module['modShpFreeShipmentFrom'] && $module['modShpFreeShipmentFrom']>0) {
                        $ret['error']='no_shipment';    
                        //$ret['shop_make_order']='error';                      
                    } else {
                        $number=str_replace(array('{MM}', '{YY}', '{YYYY}', '{NNN}', '{NNNN}', '{NNNNN}', '{NNNNNN}'), array(date('m'), date('y'), date('Y'), $spad[3], $spad[4], $spad[5], $spad[6]), $module['modShpOrderNumberFormat']);
                        
                        $orders_table=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='".$module['modShpOrdersTable']."'"));
                        $users_table=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='".$module['modShpUsersTable']."'"));
                        $products_table=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM tables WHERE tabName='".$module['modShpProductsTable']."'"));
                      
                                
                        // print_r($_POST);
                         //print_r($orders_table);
                        //exit;
                        $positions=null;
                        $total_amount=0;
                        $total_price=0;
                        if(!$_SESSION['cart'][$module['modName']]['items']) {
                            Header('Location: /');
                            exit;                        
                        }
						
						// count weight from cart
						$waga=0;
						foreach((array)$_SESSION['cart']['shop']['items'] as $key=>$item) {

							$waga+=$item['prd#waga']*$item['amount'];
						}			

                        foreach($_SESSION['cart'][$module['modName']]['items'] as $key=>$item) {
                            $ptab=array(
                                $orders_table['tabPrefix'].'#pos_product'=>$item[$products_table['tabPrefix'].'Id'],
                                $orders_table['tabPrefix'].'#pos_kod_produktu'=>$item['prd#kod_produktu'],
                                $orders_table['tabPrefix'].'#pos_product#label'=>$item[$module['modShpFieldLabel']],                        
                                $orders_table['tabPrefix'].'#pos_netto'=>$item[$module['modShpFieldNetto']],
                                $orders_table['tabPrefix'].'#pos_brutto'=>$item[$module['modShpFieldBrutto']],
                                $orders_table['tabPrefix'].'#pos_total_brutto'=>($item[$module['modShpFieldBrutto']]*$item['amount']),                                
                                $orders_table['tabPrefix'].'#pos_vat'=>$item[$module['modShpFieldVAT']],
                                $orders_table['tabPrefix'].'#pos_amount'=>$item['amount'],  
                                'producent'=>$item['producent']                                                                                                                                                                 
                            );
                            
				
                            if($item['attributes']) {
                                $atab=null;
                                foreach((array)$item[$module['modShpFieldAttrGroups']] as $k2=>$i2) {
                                    $atab[$i2[$products_table['tabPrefix'].'#attg_title']]=$item[$module['modShpFieldAttributes']][$item['attributes'][$i2[$products_table['tabPrefix'].'#attg_name']]][$products_table['tabPrefix'].'#attr_title'];
                                }
                                $ptab[$orders_table['tabPrefix'].'#pos_attr_list']=base64_encode(json_encode($atab));
								
							
                            }     

				

                            
                            $positions[]=$ptab;
                            

                            
                            $total_amount+=$item['amount'];
                            $total_price+=($item[$module['modShpFieldBrutto']]*$item['amount']);
                        }
						
                        foreach($_SESSION['cart'][$module['modName']]['items'] as $key=>$item) {						
							$prod = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM table_products WHERE prdId='".$item['prdId']."'"));

if($item['prd#stany']):
							$item['prd#stany']=json_decode($prod['prd#stany'], true);
							$kod='';
							foreach ((array)$item['attributes'] as $ka=>$at) {
								//$kod.=$item['prd#attributes'][$at]['prd#symbol_stany'].'_';
								$kod.=$item['prd#attributes'][$at]['prd#symbol_stany'].';';
							}
							$kod=substr($kod,0,-1);

							foreach($item['prd#stany'] as $ks=>$st) {
								if($st['prd#stan_atrybuty']==$kod) {
									$item['prd#stany'][$ks]['prd#stan_ilosc']-=$item['amount'];
								}
							}	
							mysqli_query($db, "UPDATE table_products SET `prd#stany`='".json_encode($item['prd#stany'])."' WHERE prdId='".$item['prdId']."'");


else:
								$tst = $cprod['prd#ilosc'] - $item['amount'];
							$xstat='';
							if($tst==0) $xstat = ", prdStatus='0' ";
							mysqli_query($db, "UPDATE table_products SET `prd#ilosc`=`prd#ilosc`-".$item['amount'].$xstat." WHERE prdId='".$item['prdId']."'");
endif;							


						}







                        if($_SESSION['rabat']) {
                            $rab=$_SESSION['rabat'];
                            if($rab['rab#typ']=='k') {
                                $rabatw=(($rab['rab#wartosc']));                                                
                            } else { 
                                $rabatw=($_SESSION['cart']['shop']['total_price_brutto']*($rab['rab#wartosc']/100));
                            } 
                                       
                        
                            $positions[]=array(
                                'ord#pos_product'=>'0',
                                'ord#pos_product#label'=>$_SESSION['rabat']['rab#nazwa'],                                 
                                'ord#pos_brutto'=>$rabatw*-1,    
                                'ord#pos_total_brutto'=>$rabatw*-1, 
                                'ord#pos_amount'=>1,                        
                            );  
                            
                            if($rab['rab#rodzaj']=='j') {
                                mysqli_query($db, "UPDATE table_rabatowe SET rabStatus='0' WHERE rabId='".$rab['rabId']."'");                                
                            } 
                            
                    
                        }                        

                        

                        //$shipment                        
                        //print_r()
                        
                        $userid=null;
                        if($_SESSION['user'][$module['modShpUsersVariable']]) {
                            $userid=$_SESSION['user'][$module['modShpUsersVariable']][$users_table['tabPrefix'].'Id'];
                        }
                        
                        if($_SESSION['cart'][$module['modName']]['total_price_brutto']>$module['modShpFreeShipmentFrom'] && $module['modShpFreeShipmentFrom']>0) {
                            $shipment['modShpShipment']='Darmowa przesyłka';
                            $shipval=0;
                        
                        } else {
                            $shipment=$module['modShpShipments'][$_POST['shipment']];
							$item=$shipment;
							$ranges=json_decode(urldecode(base64_decode($item['modShpShipmentRanges'])),true);
							if($ranges) {
								foreach($ranges as $k=>$range) {
									$split=explode('-', $k);
									if($waga>=$split[0] && $waga<$split[1]) {
										$shipment['modShpShipmentBrutto']=(float)$range;
									}
								}
							}	

							
                            $shipval=$shipment['modShpShipmentBrutto'];
                            if($shipment['modShpShipmentMode']!='only_once') {
                                $shipval=$shipment['modShpShipmentBrutto']*$total_amount;                
                            }
                        }
                        //echo '<pre>';
                        $total_cart=$total_price;
                        $total_price+=$shipval;                           
                        unset($_SESSION['cart'][$module['modName']]);
   
                        $statuses=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM customFields WHERE cfiTable='".$module['modShpOrdersTable']."' AND cfiName='order_status'"));
                        $statuses=json_decode($statuses['cfiParameters'], true);
                        require_once('functions.php');

                        //print_r($module);
                        //

   
                    //print_r($_SESSION);
                        if($_POST['fakpar']) {
                            $fp_field=",`".$orders_table['tabPrefix']."#fakpar`";
                            $fp_val=",'".$_POST['fakpar']."'";
                        }



                        $fp_field.=",`".$orders_table['tabPrefix']."#uwagi`";
                        $fp_val.=",'".$_POST['uwagi']."'";  


                        switch($_POST['payment']) {
                            case 'prepaid': $payment_name="Przedpłata na konto"; break;
                            case 'ondelivery': $payment_name="Za pobraniem"; break;
                            case 'p24': $payment_name="Przelewy 24"; break;
                        }
						
                        $fp_field.=",`ord#payment_type`";
                        $fp_val.=",'".$_POST['payment']."'";						
                        
                        $sql="INSERT INTO $module[modShpOrdersTable] (`".$orders_table['tabPrefix']."#order_date`, `".$orders_table['tabPrefix']."#order_status`, `".$orders_table['tabPrefix']."#total_cart`, `".$orders_table['tabPrefix']."#shipment_name`, `".$orders_table['tabPrefix']."#payment_name`, `".$orders_table['tabPrefix']."#shipment_value`, `".$orders_table['tabPrefix']."#total_order`, `".$orders_table['tabPrefix']."#user`, `".$orders_table['tabPrefix']."#number`, `".$orders_table['tabPrefix']."#positions`".$xf_fields.$fp_field.") VALUES (NOW(), '".$statuses['values'][0]."', '".($total_cart-$rabatw)."', '".$shipment['modShpShipment']."', '".$payment_name."', '".$shipval."', '".($total_price-$rabatw)."', '".$userid."', '".$number."', '".addslashes(json_encode($positions))."'".$xf_values.$fp_val.")";
                        //echo $sql;
                        //echo $sql;
                        //exit;
                        $ret['shop_make_order']='success';  
                        mysqli_query($db, "UPDATE module_shop SET modShpCurrentOrderNumber=modShpCurrentOrderNumber+1 WHERE modShpId='".$module['modId']."'");                            
                        mysqli_query($db, $sql);
                        $_SESSION['rabat']=null;                          

                        
                        $msg=json_decode($module['modShpStatusMessages'],true);
                        foreach($msg as $key=>$item) {
                            if($item['modShpSMStatus']==$statuses['values'][0]) {
                                $notify=urldecode(base64_decode(substr($item['modShpSMMessage'],18)));
                                $subject= $item['modShpSMSubject'];
                                break;
                            }
                        }
                        $module_settings=$module;
                        $id=mysqli_insert_id($db);
                        $order=mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM ".$module_settings['modShpOrdersTable']." WHERE ".$orders_table['tabPrefix']."Id='".$id."'"));                           
                        if($notify) {
                            $notify=parse_notify($notify, $id);
                            $subject=parse_notify($subject, $id);
                            mail_send($module_settings['modShpMailFrom'], $order[$orders_table['tabPrefix'].'#del_email'], $subject, $notify, $module_settings['modShpMailCC'] );                              
                        }
                        
                     
                        $ret['order_details']=$order;
                        
                        
                        //echo $notify;
                        //exit;                        
                        
                    }                  
                
                }

                
                
                
            }
            

               
        } 
        //print_r($module);  

 
        return $ret;
    }
    
?>
