# -*- coding: utf-8 -*-
"""
Copyright (c) 2016 Biuro Urządzania Lasu i Geodezji Leśnej

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), 
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
OTHER DEALINGS IN THE SOFTWARE.
"""

#Marcin Śliwa
from Mapa_PU.kontroler.etykietowanie import EtykietyTabel
from Mapa_PU.kontroler.obiekty_liniowe import ObiektyLiniowe

from Mapa_PU.kontroler.komunikaty import *


from Mapa_PU.kontroler import komunikaty
from Mapa_PU.model.konfiguracja import Konfiguracja


class Etykietownik:
    """Obiekt etykietuj�cy obiekty"""
    
    def __init__(self,iface,Konfiguracja,mapa):
        """konstruktor
        
        """
        self.iface=iface
        self.konfiguracja=Konfiguracja
        self.mapa=mapa
        
        
    def kontrola(self,nazwaWarstwy,Konfiguracja):
        """kontroluje czy są dostępne zasoby do wykonania przypadku"""
        pass
    
    
    def etykietuj_obiekty_podstawowe(self):
        """Etykietuje obiekty podstawowe"""
        try:
            NAZWA_WARSTWY='O_PODST'
            ATRYBUTY=('ADR_ADM','ADR_BDL','NR_EW','NR_KONT')
            #zapytanie do pobrania danych z bazy    
            ZAPYTANIE="SELECT DISTINCT F_ARODES.ADRESS_FOREST AS ADR_BDL, Mid([ADR_BDL],19,4) AS LITERKA ,[F_PARCEL]![COUNTY_CD]+'-'+[F_PARCEL]![DISTRICT_CD]+'-'+[F_PARCEL]![MUNICIPALITY_CD]+'-'+[F_PARCEL]![COMMUNITY_CD] AS ADR_ADM, F_PARCEL.PARCEL_NR AS NR_EW, [F_PARCEL].[STAKE_1] & '/' & [F_PARCEL].[STAKE_2] AS UDZIAL, F_PARCEL_LAND_USE.SHAPE_NR AS KONT, F_PARCEL_LAND_USE.AREA_USE_CD AS R_UZ, F_PARCEL_LAND_USE.SOIL_QUALITY_CD AS KL_UZ, F_PARCEL_LAND_USE.LAND_USE_AREA AS POW_UZ, F_PARCEL.PARCEL_AREA AS POW_DZ  FROM F_PARCEL INNER JOIN (F_PARCEL_LAND_USE INNER JOIN (F_ARODES INNER JOIN F_AROD_LAND_USE ON F_ARODES.ARODES_INT_NUM = F_AROD_LAND_USE.ARODES_INT_NUM) ON (F_PARCEL_LAND_USE.SHAPE_NR = F_AROD_LAND_USE.SHAPE_NR) AND (F_PARCEL_LAND_USE.PARCEL_INT_NUM = F_AROD_LAND_USE.PARCEL_INT_NUM)) ON F_PARCEL.PARCEL_INT_NUM = F_PARCEL_LAND_USE.PARCEL_INT_NUM WHERE (((F_ARODES.ADRESS_VALID)='T'));"
            NAGLOWKI= [u'ADRES BDL', u'LITERA WYDZ.', u'ADRES ADM.', u'NR. DZIAŁKI',u'UDZIAŁ', u'NR. KONTURU', u'RODZAJ UŻ.', u'KLASA UŻ.', u'POW. UŻYTKU', u'POW. DZIAŁKI']
            TYTUL=u'Etykietuj obiekty podstawowe'
            mapowanie={ 'ADR_BDL' : 0,
                        'ADR_ADM':2 ,
                        'NR_EW':3,
                        'NR_KONT':5 }
                    
            
            
            self.etykietujOP=EtykietyTabel(self.iface,NAZWA_WARSTWY,ATRYBUTY,self.konfiguracja,self.mapa)
            self.etykietujOP.konfiguruj(ZAPYTANIE, NAGLOWKI, mapowanie, TYTUL)            
                       
            
            self.etykietujOP.etykietuj()
           
           
        except Exception as e:
            komunikaty.blad_systemowy(e)
            
    def etykietuj_obiekty_liniowe(self):
        """Etykietuje obiekty liniowe"""
        try:
            self.etykietujLinie=ObiektyLiniowe(self.iface,self.konfiguracja,self.mapa)
            self.etykietujLinie.etykietuj()
        except Exception as e:
            komunikaty.blad_systemowy(e)
            
    def etykietuj_PNSW(self):
        """Etykietuje obiekty PNSW"""
        try:
            NAZWA_WARSTWY='PNSW'
            ATRYBUTY=('ADR_BDL', 'KOD_PNSW', 'NR_PNSW','NR_EW')
            #zapytanie do pobrania danych z bazy    
            ZAPYTANIE="SELECT DISTINCT F_ARODES.ADRESS_FOREST AS ADR_BDL, F_AROD_SPEC_AREA.SPECIAL_AREA_CD AS KOD_PNSW, F_AROD_SPEC_AREA.AROD_SPAREA_ORDER AS NR_PNSW, [F_PARCEL]![COUNTY_CD]+'-'+[F_PARCEL]![DISTRICT_CD]+'-'+[F_PARCEL]![MUNICIPALITY_CD]+'-'+[F_PARCEL]![COMMUNITY_CD] AS ADR_ADM, F_PARCEL.PARCEL_NR AS NR_EW FROM F_PARCEL_LAND_USE INNER JOIN ((F_ARODES INNER JOIN F_AROD_SPEC_AREA ON F_ARODES.ARODES_INT_NUM = F_AROD_SPEC_AREA.ARODES_INT_NUM) INNER JOIN (F_PARCEL INNER JOIN F_AROD_LAND_USE ON F_PARCEL.PARCEL_INT_NUM = F_AROD_LAND_USE.PARCEL_INT_NUM) ON F_ARODES.ARODES_INT_NUM = F_AROD_LAND_USE.ARODES_INT_NUM) ON (F_PARCEL.PARCEL_INT_NUM = F_PARCEL_LAND_USE.PARCEL_INT_NUM) AND (F_PARCEL_LAND_USE.SHAPE_NR = F_AROD_LAND_USE.SHAPE_NR) AND (F_PARCEL_LAND_USE.PARCEL_INT_NUM = F_AROD_LAND_USE.PARCEL_INT_NUM);"
            NAGLOWKI= ['ADRES BDL','KOD PNSW', 'NR. PNSW', 'ADRES ADM.', u'NR. DZIAŁKI']
            TYTUL=u'Etykietuj PNSW'
            mapowanie={ 'ADR_BDL' : 0,
                        'KOD_PNSW':1 ,
                        'NR_PNSW':2,
                        'NR_EW':4,
                        'ADR_ADM':3 }
            
            self.etykietujPN=EtykietyTabel(self.iface,NAZWA_WARSTWY,ATRYBUTY,self.konfiguracja,self.mapa)
            self.etykietujPN.konfiguruj(ZAPYTANIE, NAGLOWKI, mapowanie, TYTUL)            
            self.etykietujPN.etykietuj()
        except Exception as e:
            komunikaty.blad_systemowy(e)
            
    def etykietuj_osobliwosci_powierzchniowe(self):
        """Etykietuje obiekty osobliwości przyrodnicze powierzchniowe"""
        try:
            NAZWA_WARSTWY='OS_POW'
            ATRYBUTY=('ADR_BDL', 'KOD_OSOBL', 'NR_OSOBL', 'POW_OSOBL')
            #zapytanie do pobrania danych z bazy    
            ZAPYTANIE="SELECT F_ARODES.ADRESS_FOREST AS ADR_BDL, F_AROD_PHENOMENA.PHENOMENA_CD AS KOD_OSOBL, F_AROD_PHENOMENA.PHEN_RANK_ORDER AS NR_OSOBL, F_AROD_PHENOMENA.PHEN_AREA AS POW_OSOBL FROM F_ARODES INNER JOIN F_AROD_PHENOMENA ON F_ARODES.ARODES_INT_NUM = F_AROD_PHENOMENA.ARODES_INT_NUM WHERE (((F_ARODES.ADRESS_VALID)='T')) AND F_AROD_PHENOMENA.PHEN_AREA IS NOT NULL;"
            NAGLOWKI= ['ADRES BDL', 'KOD OSOBL.', 'NR. OSOBL.', 'POW. OSOBL.']
            TYTUL=u'Etykietuj osobliwości przyrodnicze powierzchniowe'
            mapowanie={ 'KOD_OSOBL' : 1,
                           'ADR_BDL':0 ,
                          'POW_OSOBL':3,
                          'NR_OSOBL':2 }
            
            
            self.etykietujOP=EtykietyTabel(self.iface,NAZWA_WARSTWY,ATRYBUTY,self.konfiguracja,self.mapa)
            
            self.etykietujOP.konfiguruj(ZAPYTANIE, NAGLOWKI, mapowanie, TYTUL)            
            
            self.etykietujOP.etykietuj()
            
        except Exception as e:
            komunikaty.blad_systemowy(e) 
            
    def etykietuj_osobliwosci_punktowe(self):
        """Etykietuje obiekty osobliwości przyrodnicze powierzchniowe"""
        try:
            NAZWA_WARSTWY='OS_PKT'
            ATRYBUTY=('ADR_BDL', 'KOD_OSOBL', 'NR_OSOBL')
            #zapytanie do pobrania danych z bazy    
            ZAPYTANIE="SELECT F_ARODES.ADRESS_FOREST AS ADR_BDL, F_AROD_PHENOMENA.PHENOMENA_CD AS KOD_OSOBL, F_AROD_PHENOMENA.PHEN_RANK_ORDER AS NR_OSOBL FROM F_ARODES INNER JOIN F_AROD_PHENOMENA ON F_ARODES.ARODES_INT_NUM = F_AROD_PHENOMENA.ARODES_INT_NUM WHERE (((F_ARODES.ADRESS_VALID)='T')) AND F_AROD_PHENOMENA.PHEN_AREA IS NULL;"
            NAGLOWKI= ['ADRES BDL','KOD OSOBL.','NR. OSOBL.']
            TYTUL=u'Etykietuj osobliwości przyrodnicze punktowe'
            mapowanie={ 'KOD_OSOBL' : 1,
                        'NR_OSOBL':2 ,
                        'ADR_BDL':0
                        
                        }
            
            self.etykietujOP=EtykietyTabel(self.iface,NAZWA_WARSTWY,ATRYBUTY,self.konfiguracja,self.mapa,5)
            self.etykietujOP.konfiguruj(ZAPYTANIE, NAGLOWKI, mapowanie, TYTUL)            
            
            self.etykietujOP.etykietuj()
        except Exception as e:
            komunikaty.blad_systemowy(e)