#
# -*- coding: utf-8 -*-
# Execute este arquivo no QGis para configurá-lo nos padrões do Inteligeo.
# Abra o QGis Desktop versao 2.16 ou superior e siga os seguintes passos:
# Abra a janela "plugins" -> "Python Console"
# Arraste este arquivo para a janela do "Python Console"
# O esperado é que apareçam as mensagens de configuração de idioma, proxy, projeções, etc.
# Reinicie o QGis

import sys
import platform
import time
import qgis

try:
    # includes QSettings
    from PyQt4.QtCore import *
    from PyQt4.Gui import *
    from PyQt4.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QDialog, QGridLayout, QVBoxLayout, QLabel, QPushButton, QRadioButton, QMessageBox, qApp
    print('Importadas biliotecas QGis 2.18')
except:
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QDialog, QGridLayout, QVBoxLayout, QLabel, QPushButton, QRadioButton, QMessageBox, qApp
    print('Importadas bibliotecas QGis 3.0 ou superior')

try:
    sys.stdout.write('.')
except:
    qgis.utils.iface.actionShowPythonDialog().trigger()

s = QSettings()
# s.allKeys() #get all setting names
# s0={i:s.value(i) for i in s.allKeys()} #build a dictionary
# perform the changes and
#s1={i:s.value(i) for i in s.allKeys()}
#changed_settings=[[i,s0.get(i,None),s1.get(i,None)] for i in set(s0.keys()).union(set(s1.keys())) if s0.get(i,None)!=s1.get(i,None)]
# s.clear() #clear all settings
# s.value(...) #get a setting value
#[[i, s.value(i)] for i in s.allKeys() if 'xyz' in i]
# QgsApplication.qgisUserDbFilePath()

# lista de [idiomas][codigos]
lista_idioma = [{"idioma": "Portugues", "codigo": "pt_BR"},
                {"idioma": "Ingles", "codigo": "en_US"}]


def configura_idioma():

    # objeto janela dialog mais geral
    qd = QDialog()

    # objeto widget
    w = QWidget()

    # layout tipo grid
    grid = QGridLayout()

    # layout tipo box vertical
    layout = QVBoxLayout()

    # string para setar novo idioma
    novo_idioma = ""

    # widget label rodape
    l0 = QLabel()
    l0.setText("*Idioma atual: " + s.value("locale/userLocale"))

    # widget pushbutton
    b1 = QPushButton()
    b1.setText("Aplicar")

    # desativar ate que radiobutton seja selecionado
    b1.setEnabled(False)

    # setar acao ao clicar no botao
    b1.clicked.connect(lambda: btn_aplicar(qd))

    # radio button do idioma I
    rb0 = QRadioButton(lista_idioma[0]["idioma"])
    rb0.clicked.connect(lambda: b1.setEnabled(True))
    rb0.clicked.connect(lambda: rb_pressed(rb0))

    # radio button do idioma II
    rb1 = QRadioButton(lista_idioma[1]["idioma"])
    rb1.clicked.connect(lambda: b1.setEnabled(True))
    rb1.clicked.connect(lambda: rb_pressed(rb1))

    # adicionar widget radio button I na posicao 0,0
    grid.addWidget(rb0, 0, 0)

    # adicionar widget label com codigo do idioma I na posicao 0,1
    l_br = QLabel(lista_idioma[0]["codigo"])
    grid.addWidget(l_br, 0, 1)

    # adicionar widget radio button II na posicao 1,0
    grid.addWidget(rb1, 1, 0)

    # adicionar widget label com codigo do idioma II na posicao 1,1
    l_en_us = QLabel(lista_idioma[1]["codigo"])
    grid.addWidget(l_en_us, 1, 1)

    # adicionar widget button
    layout.addWidget(b1)

    # adicionar widget label rodape
    layout.addWidget(l0)

    # inserir layout grid no inicio do layout box
    layout.insertLayout(0, grid)

    # configurar layout box para a janela dialog
    qd.setLayout(layout)
    qd.setWindowTitle("Selecione idioma: ")
    qd.setMinimumWidth(200)

    # mostra dialog e bloqueia execucao ate fechamento
    qd.exec_()


def btn_aplicar(qinput):
    '''
    Funcao com acoes para o botao aplicar mudanca de idioma.
    Seta o valor do idiomae fecha a dialog.
    '''
    print('Configurando idioma para: ' + novo_idioma)
    s.setValue('locale/overrideFlag', 'true')
    s.setValue('locale/userLocale', novo_idioma)
    qinput.close()


def rb_pressed(btn):
    '''
    Funcao com acao ao pressionar radio button
    Configura variavel global com novo idioma de acordo com radio button pressionado
    '''
    global novo_idioma

    if btn.text() == lista_idioma[0]["idioma"]:
        novo_idioma = lista_idioma[0]["codigo"]
    elif btn.text() == lista_idioma[1]["idioma"]:
        novo_idioma = lista_idioma[1]["codigo"]
    else:
        print("Novo idioma invalido. Idioma nao alterado.")
        return


def enable_btn(b):
    '''
    Habilita botao para aplicar novo idioma apos selecao de radio button
    '''
    b.setEnabled(True)


print('Configurando idioma...')
# abrir janela dialog para selecao de idioma
configura_idioma()
print('Configurando proxy...')
s.setValue('proxy/proxyEnabled', 'false')
s.setValue('proxy/proxyExcludedUrls', '10.*|*.pf.gov.br|*.dpf.gov.br | 192.*')
s.setValue('proxy/proxyHost', 'proxy.dpf.gov.br')
s.setValue('proxy/proxyPassword', '')
s.setValue('proxy/proxyPort', '3128')
s.setValue('proxy/proxyType', 'HttpProxy')
s.setValue('proxy/proxyUser', '')
print('Configurando reprojecao em tempo real...')
s.setValue('Projections/defaultBehaviour', 'prompt')
s.setValue('Projections/layerDefaultCrs', 'EPSG:4326')
s.setValue('Projections/otfTransformAutoEnable', 'false')
s.setValue('Projections/otfTransformEnabled', 'true')
s.setValue('Projections/projectDefaultCrs', 'EPSG:4326')

s.setValue('Qgis/parallel_rendering', 'true')

print('Configurando base de dados PostGIS do Inteligeo...')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/allowGeometrylessTables', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/database', 'mapas')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/dontResolveType', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/estimatedMetadata', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/geometryColumnsOnly', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/host', 'igeovmpostgis.inteligeo.ditec.pf.gov.br')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/username', 'usuario')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/password', 'usuario')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/port', '5432')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/publicOnly', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/savePassword', 'true')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/saveUsername', 'true')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 3/service', '')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/allowGeometrylessTables', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/database', 'igeo4')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/dontResolveType', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/estimatedMetadata', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/geometryColumnsOnly', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/host', 'igeovmpostgis.inteligeo.ditec.pf.gov.br')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/username', 'usuario')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/password', 'usuario')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/port', '5432')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/publicOnly', 'false')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/savePassword', 'true')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/saveUsername', 'true')
s.setValue('PostgreSQL/connections/Base de dados POSTGIS Inteligeo 4/service', '')

print('Configurando servicos WFS do Inteligeo...')
s.setValue('qgis/WFS/Inteligeo WFS - VPN OK/authcfg', '')
s.setValue('qgis/WFS/Inteligeo WFS - VPN OK/password', '')
s.setValue('qgis/WFS/Inteligeo WFS - VPN OK/username', '')
s.setValue('qgis/connections-wfs/Inteligeo WFS - VPN OK/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Inteligeo WFS - VPN OK/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Inteligeo WFS - VPN OK/version', 'auto')
s.setValue('qgis/connections-wfs/Inteligeo WFS - VPN OK/url', 'https://www.inteligeo.ditec.pf.gov.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')

print('Configurando servicos WMTS do Inteligeo...')
s.setValue('qgis/WMS/Inteligeo WMTS/authcfg', '')
s.setValue('qgis/WMS/Inteligeo WMTS/password', '')
s.setValue('qgis/WMS/Inteligeo WMTS/username', '')
s.setValue('qgis/connections-wms/Inteligeo WMTS/dpiMode', '7')
s.setValue('qgis/connections-wms/Inteligeo WMTS/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/ignoreGetFeatureInfoURI', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/ignoreGetMapURI', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/ignoreReportedLayerExtents', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/referer', '')
s.setValue('qgis/connections-wms/Inteligeo WMTS/smoothPixmapTransform', 'false')
s.setValue('qgis/connections-wms/Inteligeo WMTS/url', 'https://www.inteligeo.ditec.pf.gov.br/geoserver/gwc/service/wmts?REQUEST=GetCapabilities')


print('Configurando servicos WMS do exercito...')
for i in ['25', '50', '100', '250']:
    s.setValue('Qgis/WMS/Exercito 1:' + i + '.000/password', '')
    s.setValue('Qgis/WMS/Exercito 1:' + i + '.000/username', '')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/dpiMode', 7)
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/ignoreAxisOrientation', 'false')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/ignoreGetFeatureInfoURI', 'false')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/ignoreGetMapURI', 'false')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/invertAxisOrientation', 'false')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/referer', '')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/smoothPixmapTransform', 'false')
    s.setValue('Qgis/connections-wms/Exercito 1:' + i + '.000/url', 'http://www.geoportal.eb.mil.br/teogc/' + i + '/terraogcmed.cgi?VERSION=1.1.1')

print('Configurando servicos WFS da Aeronautica...')
s.setValue('qgis/WFS/Aeronautica/authcfg', '')
s.setValue('qgis/WFS/Aeronautica/password', '')
s.setValue('qgis/WFS/Aeronautica/username', '')
s.setValue('qgis/connections-wfs/Aeronautica/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Aeronautica/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Aeronautica/version', 'auto')
# url WFS obtida de: http://www.aisweb.aer.mil.br/geoserver
s.setValue('qgis/connections-wfs/Aeronautica/url', 'http://www.aisweb.aer.mil.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')


print('Configurando servicos WFS do IBAMA...')
s.setValue('qgis/WFS/IBAMA/authcfg', '')
s.setValue('qgis/WFS/IBAMA/password', '')
s.setValue('qgis/WFS/IBAMA/username', '')
s.setValue('qgis/connections-wfs/IBAMA/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/IBAMA/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/IBAMA/version', 'auto')
s.setValue('qgis/connections-wfs/IBAMA/url', 'http://siscom.ibama.gov.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')


print('Configurando servicos WFS do ICMBIO...')
s.setValue('qgis/WFS/ICMBIO/authcfg', '')
s.setValue('qgis/WFS/ICMBIO/password', '')
s.setValue('qgis/WFS/ICMBIO/username', '')
s.setValue('qgis/connections-wfs/ICMBIO/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/ICMBIO/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/ICMBIO/version', 'auto')
s.setValue('qgis/connections-wfs/ICMBIO/url', 'http://mapas.icmbio.gov.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')


print('Configurando servicos WFS do IBGE...')
s.setValue('qgis/WFS/IBGE/authcfg', '')
s.setValue('qgis/WFS/IBGE/password', '')
s.setValue('qgis/WFS/IBGE/username', '')
s.setValue('qgis/connections-wfs/IBGE/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/IBGE/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/IBGE/version', 'auto')
s.setValue('qgis/connections-wfs/IBGE/url', 'http://www.geoservicos.ibge.gov.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')


print('Configurando servicos WFS da FUNAI...')
s.setValue('qgis/WFS/FUNAI/authcfg', '')
s.setValue('qgis/WFS/FUNAI/password', '')
s.setValue('qgis/WFS/FUNAI/username', '')
s.setValue('qgis/connections-wfs/FUNAI/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/FUNAI/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/FUNAI/version', 'auto')
s.setValue('qgis/connections-wfs/FUNAI/url', 'http://geoserver.funai.gov.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')

print('Configurando servicos WFS do Sistema Nacional de Portos...')
s.setValue('qgis/WFS/Sistema Nacional de Portos/authcfg', '')
s.setValue('qgis/WFS/Sistema Nacional de Portos/password', '')
s.setValue('qgis/WFS/Sistema Nacional de Portos/username', '')
s.setValue('qgis/connections-wfs/Sistema Nacional de Portos/ignoreAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Sistema Nacional de Portos/invertAxisOrientation', 'false')
s.setValue('qgis/connections-wfs/Sistema Nacional de Portos/version', 'auto')
s.setValue('qgis/connections-wfs/Sistema Nacional de Portos/url', 'http://maps-stigeo-st.labtrans.ufsc.br/geoserver/ows?service=wfs&version=2.0.0&request=GetCapabilities')

print('Configurando servico de imagens do OpenStreetMap...')
if 'qgis/connections-xyz/OpenStreetMap/url' not in QSettings().allKeys():
    openstreetmap_path = 'qgis/connections-xyz/OpenStreetMap/'
    s.setValue(openstreetmap_path + 'authcfg', '')
    s.setValue(openstreetmap_path + 'password', '')
    s.setValue(openstreetmap_path + 'referer', '')
    s.setValue(openstreetmap_path + 'url', 'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png')
    s.setValue(openstreetmap_path + 'username', '')
    s.setValue(openstreetmap_path + 'zmax', 18)
    s.setValue(openstreetmap_path + 'zmin', 0)
else:
    print('OpenStreetMap já configurado anteriormente.')

print('Configurando servico de imagens do OpenStreetMap SERPRO...')
openstreetmap_path = 'qgis/connections-xyz/OpenStreetMap - SERPRO/'
s.setValue(openstreetmap_path + 'authcfg', '')
s.setValue(openstreetmap_path + 'password', '')
s.setValue(openstreetmap_path + 'referer', '')
s.setValue(openstreetmap_path + 'url', 'https://sterna.serpro.gov.br/geo/api/tiles/OSM/{z}/{x}/{y}.png')
s.setValue(openstreetmap_path + 'username', '')
s.setValue(openstreetmap_path + 'zmax', 18)
s.setValue(openstreetmap_path + 'zmin', 0)

print('Configurando servico de imagens do OpenTopoMap SERPRO...')
openstreetmap_path = 'qgis/connections-xyz/OpenTopoMap - SERPRO/'
s.setValue(openstreetmap_path + 'authcfg', '')
s.setValue(openstreetmap_path + 'password', '')
s.setValue(openstreetmap_path + 'referer', '')
s.setValue(openstreetmap_path + 'url', 'https://sterna.serpro.gov.br/geo/api/tiles/OTM/{z}/{x}/{y}.png')
s.setValue(openstreetmap_path + 'username', '')
s.setValue(openstreetmap_path + 'zmax', 15)
s.setValue(openstreetmap_path + 'zmin', 0)

print('Configurando servico de imagens do Google...')
s.setValue('qgis/connections-xyz/Google Satellite/authcfg', '')
s.setValue('qgis/connections-xyz/Google Satellite/password', '')
s.setValue('qgis/connections-xyz/Google Satellite/referer', '')
s.setValue('qgis/connections-xyz/Google Satellite/url', 'https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}')
s.setValue('qgis/connections-xyz/Google Satellite/username', '')
s.setValue('qgis/connections-xyz/Google Satellite/zmax', 18)
s.setValue('qgis/connections-xyz/Google Satellite/zmin', 0)

s.setValue('qgis/connections-xyz/Google Hybrid/authcfg', '')
s.setValue('qgis/connections-xyz/Google Hybrid/password', '')
s.setValue('qgis/connections-xyz/Google Hybrid/referer', '')
s.setValue('qgis/connections-xyz/Google Hybrid/url', 'https://mt1.google.com/vt/lyrs=y&x={x}&y={y}&z={z}')
s.setValue('qgis/connections-xyz/Google Hybrid/username', '')
s.setValue('qgis/connections-xyz/Google Hybrid/zmax', 18)
s.setValue('qgis/connections-xyz/Google Hybrid/zmin', 0)

s.setValue('qgis/connections-xyz/Google Streets/authcfg', '')
s.setValue('qgis/connections-xyz/Google Streets/password', '')
s.setValue('qgis/connections-xyz/Google Streets/referer', '')
s.setValue('qgis/connections-xyz/Google Streets/url', 'https://mt1.google.com/vt/lyrs=m&x={x}&y={y}&z={z}')
s.setValue('qgis/connections-xyz/Google Streets/username', '')
s.setValue('qgis/connections-xyz/Google Streets/zmax', 18)
s.setValue('qgis/connections-xyz/Google Streets/zmin', 0)

print('Configurando servico de imagens do Bing...')
s.setValue('qgis/connections-xyz/Bing Aerial/authcfg', '')
s.setValue('qgis/connections-xyz/Bing Aerial/password', '')
s.setValue('qgis/connections-xyz/Bing Aerial/referer', '')
s.setValue('qgis/connections-xyz/Bing Aerial/url', 'http://ecn.t3.tiles.virtualearth.net/tiles/a{q}.jpeg?g=1')
s.setValue('qgis/connections-xyz/Bing Aerial/username', '')
s.setValue('qgis/connections-xyz/Bing Aerial/zmax', 18)
s.setValue('qgis/connections-xyz/Bing Aerial/zmin', 0)

print('Configurando servico de imagens da ESRI...')
s.setValue('qgis/connections-xyz/Esri World Imagery/authcfg', '')
s.setValue('qgis/connections-xyz/Esri World Imagery/password', '')
s.setValue('qgis/connections-xyz/Esri World Imagery/referer', '')
s.setValue('qgis/connections-xyz/Esri World Imagery/url', 'http://services.arcgisonline.com/ArcGis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}.png')
s.setValue('qgis/connections-xyz/Esri World Imagery/username', '')
s.setValue('qgis/connections-xyz/Esri World Imagery/zmax', 18)
s.setValue('qgis/connections-xyz/Esri World Imagery/zmin', 0)


p = [
    ['', '+proj=longlat'],
    ['/ UTM zone 18S', '+proj=utm +zone=18 +south'],
    ['/ UTM zone 19S', '+proj=utm +zone=19 +south'],
    ['/ UTM zone 20S', '+proj=utm +zone=20 +south'],
    ['/ UTM zone 21S', '+proj=utm +zone=21 +south'],
    ['/ UTM zone 22S', '+proj=utm +zone=22 +south'],
    ['/ UTM zone 23S', '+proj=utm +zone=23 +south'],
    ['/ UTM zone 24S', '+proj=utm +zone=24 +south'],
    ['/ UTM zone 25S', '+proj=utm +zone=25 +south'],
    ['/ UTM zone 26S', '+proj=utm +zone=26 +south'],
    ['/ UTM zone 19N', '+proj=utm +zone=19 +north'],
    ['/ UTM zone 20N', '+proj=utm +zone=20 +north'],
    ['/ UTM zone 21N', '+proj=utm +zone=21 +north'],
    ['/ UTM zone 22N', '+proj=utm +zone=22 +north']
]


d = [
    #['SIRGAS 2000','+ellps=GRS80 +towgs84=0,0,0 +no_defs'],
    ['SAD 69 depois de 1995', '+ellps=aust_SA +towgs84=-67.35,3.88,-38.22'],
    ['SAD 69 antes de 1995', '+ellps=aust_SA +towgs84=-66.87,4.37,-38.52'],
    ['SICAD', '+ellps=intl +towgs84=-144.35,242.88,-33.22'],
    ['Corrego Alegre 1970-72', '+ellps=intl +towgs84=-205.57,168.77,-4.12'],
    ['Astro Chua', '+ellps=intl +towgs84=-143.87,243.37,-33.52']
]

# Lambert Equal Area para o Brasil - centro do circulo minimo sem ilhas
# +proj=laea +lon_0=-53.737 +lat_0=-13.680 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs

'''
user_crs=[]
c=QgsCRSCache()
n=100000
crs=c.crsByAuthId('USER:'+str(n))
while(crs.toProj4()):
    print(n)
    user_crs+=[crs.toProj4()]
    n=n+1
    crs=c.crsByAuthId('USER:'+str(n))
#del c,crs
#del n
'''

print('Adicionando sistemas de coordenadas...')
adicionados = 0
preexistentes = 0
crs = qgis.core.QgsCoordinateReferenceSystem()
if not 'saveAsUserCrs' in dir(crs):
        # compatibilidade qgis 2.8:
    crs.saveAsUserCrs = crs.saveAsUserCRS

for i in d:
    for j in p:
        if('SICAD' in i[0] and '23S' not in j[0] and 'longlat' not in j[1]):
            continue
        t = j[1] + ' ' + i[1]
        valid = crs.createFromProj4(t)
        if not crs.findMatchingProj():
            crs.saveAsUserCrs(i[0] + ' ' + j[0])
            sys.stdout.write('.')
            sys.stdout.flush()
            adicionados = adicionados + 1
            #print('Adicionando sistema de coordenadas '+i[0]+' '+j[0])
        else:
            sys.stdout.write('x')
            sys.stdout.flush()
            preexistentes = preexistentes + 1
            #print('Sistema de coordenadas '+i[0]+' '+j[0]+' ja existe.')

t = '+proj=laea +lon_0=-53.737 +lat_0=-13.680 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs'
valid = crs.createFromProj4(t)
if not crs.findMatchingProj():
    crs.saveAsUserCrs('Lambert Azimutal Equal Area para o Brasil - centro no circulo circunscrito ao Brasil sem ilhas.')
    sys.stdout.write('.')
    sys.stdout.flush()
    adicionados = adicionados + 1
    #print('Adicionando sistema de coordenadas '+i[0]+' '+j[0])
else:
    sys.stdout.write('x')
    sys.stdout.flush()
    preexistentes = preexistentes + 1

#del crs
#del valid, i, j, p, d, t


print('')
print(' ' + str(adicionados) + ' adicionados, ' + str(preexistentes) + ' preexistentes.')


print('Configuracao concluida com sucesso. Reinicie o QGis para carregar as novas configuracoes.')


def dialog_restart_qgis():
    msg = QMessageBox()
    msg.setIcon(QMessageBox.Information)
    msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
    msg.setText("Configuracoes realizadas com sucesso.")
    msg.setInformativeText("Pressione OK para encerrar o QGis agora e aplicar as configurações.\n\n"+
        "Não esqueça de configurar o proxy em\nSettings->Options->Network\nou Configurações->Opções->Rede.")
    msg.setWindowTitle("Reiniciar QGis")

    msg.setDetailedText(("As configuracoes foram alteradas com sucesso.\n"
                         "Necessario reiniciar o QGis para que as configuracoes tenham efeito."))

    # mostra a janela e bloqueia aguardando botão ser pressionado
    btn = msg.exec_()

    if btn == QMessageBox.Ok:
        # Restart Application

        # alternativa usando psutil para obter path do binario do QGis em execucao.
        # if 'psutil' in dir():
        #     import psutil
        #     psutil.Process(os.getpid()).exe()
        # else:
        #     print('modulo psutil nao esta instalado.')

        # se Linux, dispara novo processo QGis
        if platform.system() == 'Linux':
            proc = QProcess()
            proc.startDetached('qgis')
            # tempo para carregar novo QGis antes de encerrar atual.
            time.sleep(1)

        else:
            # se windows
            from subprocess import Popen
            Popen(sys.executable)
            time.sleep(1)

        # TODO: buscar forma de encerrar o QGis sem causar crash no plugin python
        # fecha QGis atual
        # QApplication.exit()
        # QCoreApplication.quit()
        qApp.quit()

    elif btn == QMessageBox.Cancel:
        # usuário optou por não reiniciar agora. nada a fazer.
        pass


# chamar função de mensagem de restart QGis
dialog_restart_qgis()
