"""
***************************************************************************
    Output.py
    ---------------------
    Date                 : August 2012
    Copyright            : (C) 2012 by Victor Olaya
    Email                : volayaf at gmail dot com
***************************************************************************
*                                                                         *
*   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__ = 'Victor Olaya'
__date__ = 'August 2012'
__copyright__ = '(C) 2012, Victor Olaya'

import sys

from qgis.core import (QgsExpressionContext,
                       QgsExpressionContextUtils,
                       QgsExpression,
                       QgsExpressionContextScope,
                       QgsProject,
                       QgsSettings,
                       QgsVectorFileWriter,
                       QgsProcessingUtils,
                       QgsProcessingParameterDefinition,
                       QgsProcessingOutputRasterLayer,
                       QgsProcessingOutputVectorLayer,
                       QgsProcessingOutputMapLayer,
                       QgsProcessingOutputHtml,
                       QgsProcessingOutputNumber,
                       QgsProcessingOutputString,
                       QgsProcessingOutputBoolean,
                       QgsProcessingOutputFolder,
                       QgsProcessingOutputMultipleLayers,
                       QgsProcessingOutputPointCloudLayer)


def getOutputFromString(s):
    try:
        if "|" in s and s.startswith("Output"):
            tokens = s.split("|")
            params = [t if str(t) != "None" else None for t in tokens[1:]]
            clazz = getattr(sys.modules[__name__], tokens[0])
            return clazz(*params)
        else:
            tokens = s.split("=")
            if tokens[1].lower()[: len('output')] != 'output':
                return None

            name = tokens[0]
            description = tokens[0]

            token = tokens[1].strip()[len('output') + 1:]
            out = None

            if token.lower().strip().startswith('outputraster'):
                out = QgsProcessingOutputRasterLayer(name, description)
            elif token.lower().strip() == 'outputvector':
                out = QgsProcessingOutputVectorLayer(name, description)
            elif token.lower().strip() == 'outputlayer':
                out = QgsProcessingOutputMapLayer(name, description)
            elif token.lower().strip() == 'outputmultilayers':
                out = QgsProcessingOutputMultipleLayers(name, description)
            #            elif token.lower().strip() == 'vector point':
            #                out = OutputVector(datatype=[dataobjects.TYPE_VECTOR_POINT])
            #            elif token.lower().strip() == 'vector line':
            #                out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_LINE])
            #            elif token.lower().strip() == 'vector polygon':
            #                out = OutputVector(datatype=[OutputVector.TYPE_VECTOR_POLYGON])
            #            elif token.lower().strip().startswith('table'):
            #                out = OutputTable()
            elif token.lower().strip().startswith('outputhtml'):
                out = QgsProcessingOutputHtml(name, description)
            #            elif token.lower().strip().startswith('file'):
            #                out = OutputFile()
            #                ext = token.strip()[len('file') + 1:]
            #                if ext:
            #                    out.ext = ext
            elif token.lower().strip().startswith('outputfolder'):
                out = QgsProcessingOutputFolder(name, description)
            elif token.lower().strip().startswith('outputnumber'):
                out = QgsProcessingOutputNumber(name, description)
            elif token.lower().strip().startswith('outputstring'):
                out = QgsProcessingOutputString(name, description)
            elif token.lower().strip().startswith('outputboolean'):
                out = QgsProcessingOutputBoolean(name, description)
            elif token.lower().strip().startswith('outputPointCloud'):
                out = QgsProcessingOutputPointCloudLayer(name, description)
            #            elif token.lower().strip().startswith('extent'):
            #                out = OutputExtent()

            return out
    except:
        return None
