# -*- coding: utf-8 -*-
#
# importa_pesquisa
#
# Copyright (c) 2015 by Interlegis
#
# GNU General Public License (GPL)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
#

import csv
import urlparse
from datetime import datetime

from sigi.apps.casas.models import Orgao
from sigi.apps.servidores.models import Servidor

def importa(file_list):
    ''' Este script importa dados de um arquivo CSV e dá carga no model casas.Orgao

        O arquivo CSV esperado tem um cabeçalho de campos na primeira linha, com os seguintes campos:

        Indicação de data e hora,Pesquisador,Câmara,Possui portal,Portal Modelo,URL,Observações

        Indicação de data e hora: Uma string datetime no formato %d/%m/%y %H:%M
        Pesquisador: O nome do servidor que realizou a pesquisa, conforme cadastrado no SIGI
        Câmara: A sigla da UF seguida de um espaço, seguido de um caracter - seguido de um espaço seguido do nome do município,
                exemplo: MG - Montes Claros
        Possui portal: Deve constar "sim" ou "não" indicando se a casa possui ou não portal.
        Portal Modelo: Deve constar "sim" ou "não" indicando se o portal da casa é o portal modelo ou não.
        URL: Deve conter a URL do portal da Casa. Opcionalmente pode ter alguma observação do pesquisador
        Observações: Deve conter as observações do pesquisador, caso existam.'''

    for filename in file_list:
        print 'Importando '+filename+'.csv'
        with open(filename+'.csv', 'rb') as infile:
            with open(filename+'.out', 'wb') as outfile:
                indata = csv.reader(infile, delimiter=',', quotechar='"')
                outdata = csv.writer(outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)

                head = next(indata)
                head.append('Erros encontrados')
                outdata.writerow(head)

                for row in indata:
                    data = row[0].strip()
                    pesquisador = row[1].strip()
                    uf_cidade = row[2].strip()
                    tem_portal = row[3].strip()
                    pmodelo = row[4].strip()
                    url = row[5].strip()
                    obs = row[6].strip()

                    if data == '':
                        data = None
                    else:
                        data = datetime.strptime(data, '%d/%m/%y %H:%M')

                    uf = uf_cidade[:2]
                    cidade = uf_cidade[5:]

                    if tem_portal.lower() == 'não':
                        inclusao = Orgao.INCLUSAO_DIGITAL_CHOICES[1][0]
                    elif pmodelo.lower() == 'não':
                        inclusao = Orgao.INCLUSAO_DIGITAL_CHOICES[3][0]
                    else:
                        inclusao = Orgao.INCLUSAO_DIGITAL_CHOICES[2][0]

                    l = url.splitlines()
                    url = ''

                    for s in l:
                        p = urlparse.urlparse(s)
                        if p.netloc:
                            url = s
                        else:
                            obs = obs + '\n' + s

                    if pesquisador == '':
                        servidor = None
                    else:
                        servidor = Servidor.objects.filter(nome_completo__iexact=pesquisador)
                        cc = servidor.count()
                        if cc == 0:
                            row.append('Não encontrado servidor com este nome')
                            outdata.writerow(row)
                            continue
                        else:
                            servidor = servidor[0]

                    casa = Orgao.objects.filter(tipo_id=1, municipio__uf__sigla=uf, municipio__nome__iexact=cidade)
                    cc = casa.count()
                    if cc == 0:
                        row.append('Municipio nao foi encontrado')
                        outdata.writerow(row)
                        continue
                    elif cc > 1:
                        row.append('Existem %s casas legislativas nesta cidade')
                        outdata.writerow(row)
                        continue
                    else:
                        casa = casa[0]

                    casa.inclusao_digital = inclusao
                    casa.data_levantamento = data
                    casa.pesquisador = servidor

                    if casa.pagina_web == '':
                        casa.pagina_web = url
                    else:
                        obs = url + '\n' + obs

                    casa.obs_pesquisa = obs
                    casa.save()

        print 'O arquivo '+filename+'.out foi criado com os registros que nao puderam ser importados'