# -*- coding: utf-8 -*-

"""
/***************************************************************************
 GeoCAR                          Estado de Goiás GO onde o ZIP é único
                                 A QGIS plugin
 Cadastro Ambiental Rural
 Generated by Plugin Builder: http://g-sherman.github.io/Qgis-Plugin-Builder/
                              -------------------
        begin                : 2026-02-10
        copyright            : (C) 2026 by Prof Cazaroli e Leandro França
        email                : contato@geoone.com.br
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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.                                   *
 *                                                                         *
 ***************************************************************************/
"""

__author__ = 'Prof Cazaroli e Leandro França'
__date__ = '2026-02-10'
__copyright__ = '(C) 2026 by Prof Cazaroli e Leandro França'

__revision__ = '$Format:%H$'

from qgis.PyQt.QtCore import QCoreApplication
from qgis.core import (QgsProject, QgsProcessingAlgorithm, QgsProcessingParameterFolderDestination)
from qgis.PyQt.QtGui import QIcon
from geocar.images.Imgs import *
import os
import zipfile

class preparaCAR_ZIP_GO(QgsProcessingAlgorithm):
    OUTPUT_FOLDER = 'OUTPUT_FOLDER'

    def tr(self, string):
        return QCoreApplication.translate('Processing', string)

    def createInstance(self):
        return preparaCAR_ZIP_GO()

    def name(self):
        return 'preparaCAR_ZIP_GO'

    def displayName(self):
        return self.tr('6. Gerar Zip para o CAR de Goiás (ZIP Único)')

    def group(self):
        return self.tr(self.groupId())

    def groupId(self):
        return ''

    def icon(self):
        return QIcon(os.path.join(os.path.dirname(os.path.dirname(__file__)), 'images/geocar.png'))

    def shortHelpString(self):
        txt = """Gera um <b>arquivo ZIP único</b> contendo todas as camadas que possuem feição, necessárias para envio ao <b>Sistema do Cadastro Ambiental Rural (CAR) do Estado de Goiás</b>.
A ferramenta reúne automaticamente os arquivos das camadas existentes no projeto e compacta seus componentes (.shp, .shx, .dbf, .prj, .cpg, etc.) em um único pacote ZIP.

<b>Parâmetro principal:</b>
• Pasta de destino – diretório onde o arquivo ZIP será criado

<b>Resultado:</b>

É gerado um arquivo <b>ZIP único</b> contendo todas as camadas do projeto necessárias para o envio ao sistema do CAR de Goiás.
"""

        footer = '''<div>
                      <div align="center">
                      <img style="width: 100%; height: auto;" src="data:image/jpg;base64,'''+ CAR_GeoOne +'''
                      </div>
                      <div align="right">
                      <p align="right">
                      <a href="https://geoone.com.br/pvcar/"><span style="font-weight: bold;">Conheça o curso de Cadastro Ambiental Rural (CAR)</span></a>
                      </p>
                      <p align="right">
                      <a href="https://portal.geoone.com.br/m/lessons/car?classId=6086"><span style="font-weight: bold;">Acesse a aula sobre esta ferramenta no curso de CAR da GeoOne</span></a>
                      </p>
                      <a target="_blank" rel="noopener noreferrer" href="https://geoone.com.br/"><img title="GeoOne" src="data:image/png;base64,'''+ GeoOne +'''"></a>
                      <p><i>"Mapeamento automatizado, fácil e direto ao ponto é na GeoOne!"</i></p>
                      </div>
                    </div>'''
        return txt + footer

    def initAlgorithm(self, config=None):
        # Define the folder destination parameter
        self.addParameter(
            QgsProcessingParameterFolderDestination(
                self.OUTPUT_FOLDER,
                'Pasta para gravar os arquivos Zip de Goiás GO(Arquivos para o CAR)'
            )
        )

    def processAlgorithm(self, parameters, context, feedback):
        output_folder = self.parameterAsString(parameters, self.OUTPUT_FOLDER, context)

        # Obtém a camada ATI do projeto
        project = QgsProject.instance()
        camada_ati = project.mapLayersByName("ATI")
        if not camada_ati:
            feedback.reportError("Camada ATI não encontrada no projeto.")
            return {}
        camada_ati = camada_ati[0]

        # Caminho do arquivo da camada ATI
        caminho_ati = camada_ati.source()
        pasta_entrada = os.path.dirname(caminho_ati)

        # Nome do ZIP único
        nomeZipUnico = os.path.join(output_folder, "Camadas_GO.zip")

        # Lista todos os arquivos da pasta de entrada, exceto Linha_Auxiliar.*
        arquivos_para_zip = []
        for root, dirs, files in os.walk(pasta_entrada):
            for file in files:
                if file.lower().endswith((".shp", ".shx", ".dbf", ".prj", ".cpg", ".json", ".qmd", ".qpj")):
                    if 'Linha_Auxiliar' not in file:
                        arquivos_para_zip.append(os.path.join(root, file))

        # Cria o ZIP único
        if arquivos_para_zip:
            with zipfile.ZipFile(nomeZipUnico, 'w') as zipf:
                for f in arquivos_para_zip:
                    zipf.write(f, os.path.basename(f))

        feedback.pushInfo(f"ZIP criado em: {nomeZipUnico}")
        return {}

