<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use App\User;
use App\Dum;
//use App\User;

class SelectProstor extends Model
{
    
    private $selectorArray = array();
    
    
    /**
     * Nastavení pole definice comba dostupného uživateli s přednastavenou hodnotou Firmy x Domy x Prostory
     *     
     * @param $type pokud je D - není zobrazován Prostor
     * @param $spol společné combo pro volbu prostor i pro volbu domů -  
     * @param $redirect - A = náhrada buttonu standardního odeslání formuláře comba FDP - redirect Ajax + javascript 
     * @return array ('firmy_list', 'domy_list', 'prostory_list', 'firmaSelected' ,'dumSelected', 'prostorSelected')
     */
    public function getCombo ($type = "P", $jenPristDomy = 0, $redirect = ""){
//return $type;         
        $firmaSelected = 0;
        $dumSelected = 0;
        $prostorSelected = 0;
        $idFirstFirmyUser = 0;
        $idFirstDomuUser = 0;
        $idFirstProstorUser = 0;
        $prostoryUser_list = "";
        $currentPrZbDr = "";
        $refresh = 0;
        $domyUser_list = array();
        
        
        if($jenPristDomy){
            $type=$type."F";
            $type = substr($type,0,1)=='F' ? 'F' : $type;
        }
        
        $firmaSelected = session()->get('comboFirma'.$type);
        $dumSelected = session()->get('comboDum'.$type);
        $prostorSelected = session()->get('comboProstor'.$type);
        
        $users = New User();
        $user = Auth::user();//$users->find(Auth::user()->id);
        
       
    //Combo uloženo do session pokud existuje použiji předchozí nastavení
       
    if(empty(session()->get('ObjCombo'.$type)) || true ){
        $firmyUser_list = $users->getFirmyUserAcces($user->id,$jenPristDomy,$type);
    
        if($firmyUser_list->isNotEmpty()){
            $existSelectedFirma = $firmyUser_list->where('firma',$firmaSelected)->isNotEmpty();
            if($firmaSelected != 0 && $existSelectedFirma){
                $idFirstFirmyUser = $firmaSelected;
            }else{
                $idFirstFirmyUser = $firmyUser_list->first()->id;
            }

            //kontrola $typeCombo = P Firma - kontroluje jestli firma má přístup do prostor
            if($type=='P'){
            if (!$firmyUser_list->where('firma',$idFirstFirmyUser)->first()->pristupP){
                    foreach ($firmyUser_list as $firma){
                        if($firma->pristupP){
                            $idFirstFirmyUser = $firma->id;
                            break;
                        }
                    }
                }
            }
            //načti domy pro 1.firmu
            $domyUser_list = $user->getDomyUserAcces($user->id,$idFirstFirmyUser,$jenPristDomy);

            if($domyUser_list->isNotEmpty()){
                $selectedDumObj = $domyUser_list->where('dum',$dumSelected)->first();
                if($dumSelected != 0 && $selectedDumObj){
                        $idFirstDomuUser = $dumSelected;      
                    }else{
                        $idFirstDomuUser = $domyUser_list->first()->id;
                    }
            }
            //kontrola $typeCombo = P Domy
            $fullProstory = 0;
            if($type=='P'){
                $domyUserListObj = $domyUser_list->where('dum',$idFirstDomuUser)->first(); 
                if($domyUserListObj){
                    if(!$domyUserListObj->pristupP){
                        foreach ($domyUser_list as $dum){
                            if($dum->pristupP){
                                $idFirstDomuUser = $dum->id;
                                break;
                            }
                        }
                    }    
                }
            }
            
            $domyUser = $domyUser_list->where('dum',$idFirstDomuUser)->first();
            if($domyUser){
                $fullProstory = $domyUser->full;
            }

            if($type=='P'){
                if($idFirstDomuUser){
                    $prostoryUser_list = $user->getProstoryUserAcces($user->id,$idFirstDomuUser,$fullProstory,$type,0);
                }
                if(!isset($prostorSelected)){
                    $prostorSelected = 0;
                }
                $idFirstProstorUser=0;
                    if($prostorSelected > 0 && $prostoryUser_list->where('id',$prostorSelected)->get()){
                        $idFirstProstorUser = $prostorSelected;  
                    }else{
                        if($prostoryUser_list){
                            if(isset ($prostoryUser_list->first()->id)){
                                $idFirstProstorUser = $prostoryUser_list->first()->id;
                            }
                        }
                    }
                $currentPrZbDr = $this->currentZbDr($idFirstDomuUser,$idFirstProstorUser);    
            }
        }
        
        $this->selectorArray = array ('firmy_list' => $firmyUser_list,
                           'domy_list' => $domyUser_list,
                           'prostory_list' => $prostoryUser_list,
                           'firmaSelected' => $idFirstFirmyUser,
                           'dumSelected' => $idFirstDomuUser,
                           'typCombo' => $type,
                           'currentPrZbDr' => $currentPrZbDr,
                           'redirect' => $redirect,
                           'prostorSelected' => $idFirstProstorUser);
        session()->put(['ObjCombo'.$type=>$this->selectorArray]);    
        if($type == 'DF'){
            session()->put(['comboFirmaD'=>$idFirstFirmyUser]);
            session()->put(['comboDumD'=>$idFirstDomuUser]);
            session()->put(['comboProstorD'=>$idFirstProstorUser]);
            session()->put(['ObjComboD'=>'']);
        }
        if($type == 'D'){
            session()->put(['comboFirmaDF'=>$idFirstFirmyUser]);
            session()->put(['comboDumDF'=>$idFirstDomuUser]);
            session()->put(['comboProstorDF'=>$idFirstProstorUser]);
            session()->put(['ObjComboDF'=>'']);
        }
        if($type == 'P'){
            session()->put(['comboFirmaDF'=>$idFirstFirmyUser]);
            session()->put(['comboDumDF'=>$idFirstDomuUser]);
            session()->put(['comboProstorDF'=>$idFirstProstorUser]);
            session()->put(['ObjComboDF'=>'']);
            session()->put(['comboFirmaD'=>$idFirstFirmyUser]);
            session()->put(['comboDumD'=>$idFirstDomuUser]);
            session()->put(['comboProstorD'=>$idFirstProstorUser]);
            session()->put(['ObjComboD'=>'']);
        }
        if(substr($type,0,1) == 'D'){
            session()->put(['comboFirmaP'=>$idFirstFirmyUser]);
            session()->put(['comboDumP'=>$idFirstDomuUser]);
            session()->put(['comboProstorP'=>$idFirstProstorUser]);
            session()->put(['ObjComboP'=>'']);
        }
    }else{
            //Načtu combo uložené Comb
            $this->selectorArray = session()->get('ObjCombo'.$type);
    }
        return $this->selectorArray;
    }
    
    
    
    
    public function saveSelectProstorId($firma,$id_domu,$id_prostoru,$type=''){
        session()->put(['comboFirma'.$type =>$firma]);
        session()->put(['comboDum'.$type =>$id_domu]);
        session()->put(['comboProstor'.$type =>$id_prostoru]);
    }    
    
    /**
    * @vrací hodnotu true pokud je prostor družstevní zbytkový na SVJ 
    * a zároveň je je přihlášen uživatel tohoto prostoru
    * nebo pokud je přihlášen funkcionář s přístupem jen na družstevní prostory v SVJ
    */
    public function currentZbDr($id_domu,$id_prostoru) {
       
        $users = New User();
        $user = Auth::user();//$users->find(Auth::user()->id);
        $akt_uz_prihl = $user->osoba;
        $id_prihl = $user->id;
        
        $prostory = new Prostor();
        $det_prost = $prostory->find($id_prostoru);
        
        $akt_uz_prost = isset($det_prost->uzivatel_id) ? $det_prost->uzivatel_id : 0; 
        $akt_uzspol_prost = isset($det_prost->spoluclen_id) ? $det_prost->spoluclen_id : 0; 
        $akt_prost_Zbdr = isset($det_prost->zbyt_druz) ? $det_prost->zbyt_druz : 0; 
        
        $akt_dum = $id_domu;
        
        $dumDaoAccess = new Dum_access();
        $domy_access = $dumDaoAccess->where('dum',$id_domu)->where('user_id',$id_prihl)->first();
        
        
        $cond1 = false;
        #zbytkový družstevník je jen když uživatel prostoru = přihlášený nebo spolučlen = přihlášený
        if (($akt_uz_prihl == $akt_uz_prost || $akt_uz_prihl == $akt_uzspol_prost) && $akt_prost_Zbdr){
            $cond1 = true;
        }
        
        #pokud je přihlášen funkcionář s přístupem jen na družstevní prostory v SVJ
        $cond2 = false; 
        if(!empty($domy_access)){
            if ($domy_access->pristupDV == "D"){
                $cond2 = true;
            }   
        }
        // Pokrok vyjímka bacha
        $cond3 = false;
        if(($id_domu==9936 || $id_domu==9937) && $akt_prost_Zbdr){
            $cond3 = true;
        }
        
        $ret = 0;
        if ($cond1 || $cond2 || $cond3 ){
            $ret = 1;
        }
        return $ret;
    }

    /**
    * @vrací hodnotu true pokud je prostor družstevní zbytkový na SVJ 
    * a zároveň je je přihlášen uživatel tohoto prostoru
    * nebo pokud je přihlášen funkcionář s přístupem jen na družstevní prostory v SVJ
    */
    public function currentZbDrApi($id_domu, $id_prostoru, $user) {
        $akt_uz_prihl = $user->osoba;
        $id_prihl = $user->id;
        
        $prostory = new Prostor();
        $prostory->setConnection($user->database);
        $det_prost = $prostory->find($id_prostoru);
        
        $akt_uz_prost = isset($det_prost->uzivatel_id) ? $det_prost->uzivatel_id : 0; 
        $akt_uzspol_prost = isset($det_prost->spoluclen_id) ? $det_prost->spoluclen_id : 0; 
        $akt_prost_Zbdr = isset($det_prost->zbyt_druz) ? $det_prost->zbyt_druz : 0;
        
        $dumDaoAccess = new Dum_access();
        $dumDaoAccess->setConnection($user->database);
        $domy_access = $dumDaoAccess->where('dum',$id_domu)->where('user_id',$id_prihl)->first();
        
        
        $cond1 = false;
        #zbytkový družstevník je jen když uživatel prostoru = přihlášený nebo spolučlen = přihlášený
        if (($akt_uz_prihl == $akt_uz_prost || $akt_uz_prihl == $akt_uzspol_prost) && $akt_prost_Zbdr){
            $cond1 = true;
        }
        
        #pokud je přihlášen funkcionář s přístupem jen na družstevní prostory v SVJ
        $cond2 = false; 
        if(!empty($domy_access)){
            if ($domy_access->pristupDV == "D"){
                $cond2 = true;
            }   
        }
        // Pokrok vyjímka bacha
        $cond3 = false;
        if(($id_domu==9936 || $id_domu==9937) && $akt_prost_Zbdr){
            $cond3 = true;
        }
        
        $ret = 0;
        if ($cond1 || $cond2 || $cond3 ){
            $ret = 1;
        }
        return $ret;
    }
    
    
    /**
     * @vrací hodnoty pro COMBO_DCP Dům, vchod, číslo bytu Zakázkový přístup
     * @param $id_domu
     * @param $cp
     * @param $id_prostoru
     * @param $id_kontaktu
     * @return array selector - pole údajů pro view Combo_DCP
     */
    public function getCombo_DCP($id_domu=0,$cp="",$id_prostoru=0,$id_kontaktu=0) {
        $users = new User();
        //$domyUser = $users->find(Auth::user()->id)->DumZak;
        $id_user = Auth::user()->id;
        
        $domyUser = $users->getDomyUserAccesZak($id_user);
        //$domyUser = DumZakAccess::where('user_id',$id_user)->get();

        $selector = array();
        
        
        if ($domyUser->isNotEmpty()){
        $user = Auth::user();//$users->find($id_user);
        
        if($id_domu == 0 ){
            $dumFirst = $domyUser->first();
        }else{
            $domyObj = new Dum();
            $dumFirst = $domyObj->find($id_domu);
        }
        
//return $dumFirst->id;            

        $cp_list = array();
        $cp_list = explode(',',$dumFirst->cp_co);
        
        $fullProstory=0;
        $domyAccess = $domyUser->where('id_domu',$dumFirst->id)->first();
        if($domyAccess){
            $fullProstory=$domyAccess->full;
        }
        $prostoryUser = $user->getProstoryUserAcces($id_user,$dumFirst->id,$fullProstory,'D',0);
        
        $prostorNutny = $fullProstory ? 'N':'A';
        //$prostoryUser = $user->getProstoryUserDum($dumFirst->id,0);

        $kontaktyDomu = new Kontakty();
        $kontaktDomu = $kontaktyDomu->getKontaktyDomu($dumFirst->id,'F');
        $predsedaDomu = $kontaktyDomu->getPredsedaDomu($dumFirst->id);
        $id_domovnik = isset($predsedaDomu) ? $predsedaDomu->osoba : 0;
        
        $cpSelected = $cp;
        $prostorSelected = $id_prostoru;
        
        $kontaktSelected = $id_kontaktu == 0 ? $id_domovnik : $id_kontaktu;
        
        
        $selector['user'] = $dumFirst;
        $selector['dum'] = $dumFirst;
        $selector['cp_list'] = $cp_list;
        $selector['cpSelected'] = $cp;
        $selector['prostory_list'] = $prostoryUser;
        $selector['prostorSelected'] = $prostorSelected;
        $selector['prostorNutny'] = $prostorNutny;
        $selector['kontaktyDomu'] = $kontaktDomu;
        $selector['kontaktSelected'] = $kontaktSelected;
        
        }
        
      return $selector;  
    }
    
    
    /**
     * Nastavení pole definice comba dostupného uživateli s přednastavenou hodnotou Firmy x Domy x Prostory
     *     
     * @param $type pokud je D - není zobrazován Prostor
     * @param $spol společné combo pro volbu prostor i pro volbu domů -  
     * @param $redirect - A = náhrada buttonu standardního odeslání formuláře comba FDP - redirect Ajax + javascript 
     * @return array ('firmy_list', 'domy_list', 'prostory_list', 'firmaSelected' ,'dumSelected', 'prostorSelected')
     */
    public function getComboAll ($redirect = ""){
        
        $firmaSelected = 0;
        $dumSelected = 0;
        $prostorSelected = 0;
        $idFirstFirmyUser = 0;
        $idFirstDomuUser = 0;
        $idFirstProstorUser = 0;
        $prostoryUser_list = "";
        $currentPrZbDr = "";
        $refresh = 0;
        
        $users = New User();
        $user = Auth::user();//$users->find(Auth::user()->id);
        
        $firmaSelected = session()->get('comboFall');
        $dumSelected = session()->get('comboDall');
        $prostorSelected = session()->get('comboPall');
        
//return $pokus;        
    
        $firmyUser_list = $users->getFirmyUserAcces($user->id);
        
        if($firmyUser_list->isNotEmpty()){
            if($firmaSelected != 0 && $firmyUser_list->where('firma',$firmaSelected)){
                $idFirstFirmyUser = $firmaSelected;
            }else{
                $idFirstFirmyUser = $firmyUser_list->first()->id;
            }

//return $firmyUser_list;   

            //načti domy pro 1.firmu
            $domyUser_list = $user->getDomyUserAcces($user->id,$idFirstFirmyUser);
//return $domyUser_list;
            if($domyUser_list->isNotEmpty()){
                $selectedDumObj = $domyUser_list->where('dum',$dumSelected)->first();
                if($dumSelected != 0 && $selectedDumObj){
                        $idFirstDomuUser = $dumSelected;      
                } else{
                        $idFirstDomuUser = $domyUser_list->first()->id;
                }    
            }
//return $dumSelected;            
//return $domyUser_list; 
//return $idFirstDomuUser;           
            //kontrola $typeCombo = P Domy
            $fullProstory = 0;
            $fullProstoryObj = $domyUser_list->where('dum',$idFirstDomuUser)->first();
            if($fullProstoryObj){
                $fullProstory = $fullProstoryObj->full;
            }
                

//return $idFirstDomuUser;

            if($idFirstDomuUser){
                $prostoryUser_list = $user->getProstoryUserAcces($user->id,$idFirstDomuUser,$fullProstory,'D',0);
            }
//return $prostoryUser_list;               
            if(!isset($prostorSelected)){
                    $prostorSelected = 0;
                }
                $idFirstProstorUser=0;
                    if($prostorSelected != 0 && $prostoryUser_list->where('id',$prostorSelected)){
                        $idFirstProstorUser = $prostorSelected;  
                    }else{
                        if($prostoryUser_list){
                            if(isset ($prostoryUser_list->first()->id)){
                                $idFirstProstorUser = $prostoryUser_list->first()->id;
                            }    
                        }
                    }
            
            }else{
                $idFirstProstorUser = $prostorSelected;
            }
        $this->selectorArray = array ('firmy_list' => $firmyUser_list,
                           'domy_list' => $domyUser_list,
                           'prostory_list' => $prostoryUser_list,
                           'firmaSelected' => $idFirstFirmyUser,
                           'dumSelected' => $idFirstDomuUser,
                           'typCombo' => 'X',
                           'currentPrZbDr' => $currentPrZbDr,
                           'redirect' => $redirect,
                           'prostorSelected' => $idFirstProstorUser);
        
        return $this->selectorArray;
    }
    
    
    
    
    
}
