#!/usr/bin/env python
############################################################
# Program is part of MintPy                                #
# Copyright (c) 2013, Zhang Yunjun, Heresh Fattahi         #
# Author: Zhang Yunjun, Nov 2020                           #
############################################################

import os
import sys

# Always prefer setuptools over distutils
from setuptools import find_packages, setup

# Grab version and description from version.py
# link: https://stackoverflow.com/questions/53648900
sys.path.append(os.path.join(os.path.dirname(__file__), "src"))
from mintpy.version import description, version

# Grab long_description from README.md
with open("docs/README.md") as f:
    long_description = f.read()

setup(
    name="mintpy",
    version=version,
    description=description,
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/insarlab/MintPy",
    download_url=(f"https://github.com/insarlab/MintPy/archive/v{version}.tar.gz"),
    author="Zhang Yunjun, Heresh Fattahi",
    author_email="yunjunzgeo@gmail.com",
    license="GPL-3.0-or-later",
    license_files=("LICENSE",),

    classifiers=[
        "Development Status :: 4 - Beta",
        "Intended Audience :: Science/Research",
        "Topic :: Scientific/Engineering",
        "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
        "Operating System :: OS Independent",
        "Programming Language :: Python :: 3",
    ],
    keywords="InSAR, deformation, time-series, volcano, earthquake, tectonics, geodesy, geophysics, remote-sensing",

    project_urls={
        "Bug Reports": "https://github.com/insarlab/mintpy/issues",
        "Documentation": "https://mintpy.readthedocs.io/",
        "Source": "https://github.com/insarlab/mintpy",
    },

    # dependencies
    python_requires=">=3.6",
    install_requires=[
        "cartopy",
        "cvxopt",
        "dask>=1.0",
        "dask-jobqueue>=0.3",
        "h5py",
        "joblib",
        "lxml",
        "matplotlib",
        "numpy",
        "pre-commit",  # for developers
        "pyaps3>=0.3",
        "pykml>=0.2",
        "pyproj",
        "pyresample",  # pip installed version does not work
        "pysolid",     # pip installed version does not work because Fortran compiler is needed but not available via pip
        "rich",
        "setuptools",
        "scikit-image",
        "scipy",
    ],
    extras_require={
        "cli": ["argcomplete"],
        "extra": ["gdal"],
        "fractal": ["pyfftw"],
        "gbis": ["geoid"],                          # not available on pypi
        "isce": ["isce"],                           # not available on pypi
        "kite": ["kite"],
        "all": [
            "cli",
            "extra",
            "fractal",
            "gbis",
            "isce",
            "kite",
        ],
    },

    # package discovery
    packages=find_packages("src"),  # include all packages under src
    package_dir={"": "src"},        # tell distutils packages are under src
    entry_points={
        'console_scripts': [
            'mintpy = mintpy.__main__:main',
            'add.py = mintpy.cli.add:main',
            'asc_desc2horz_vert.py = mintpy.cli.asc_desc2horz_vert:main',
            'closure_phase_bias.py = mintpy.cli.closure_phase_bias:main',
            'dem_error.py = mintpy.cli.dem_error:main',
            'dem_gsi.py = mintpy.cli.dem_gsi:main',
            'diff.py = mintpy.cli.diff:main',
            'generate_mask.py = mintpy.cli.generate_mask:main',
            'geocode.py = mintpy.cli.geocode:main',
            'ifgram_inversion.py = mintpy.cli.ifgram_inversion:main',
            'image_math.py = mintpy.cli.image_math:main',
            'image_stitch.py = mintpy.cli.image_stitch:main',
            'info.py = mintpy.cli.info:main',
            'iono_tec.py = mintpy.cli.iono_tec:main',
            'load_data.py = mintpy.cli.load_data:main',
            'load_gbis.py = mintpy.cli.load_gbis:main',
            'local_oscilator_drift.py = mintpy.cli.local_oscilator_drift:main',
            'lookup_geo2radar.py = mintpy.cli.lookup_geo2radar:main',
            'mask.py = mintpy.cli.mask:main',
            'modify_network.py = mintpy.cli.modify_network:main',
            'multilook.py = mintpy.cli.multilook:main',
            'multi_transect.py = mintpy.multi_transect:main',
            'plate_motion.py = mintpy.cli.plate_motion:main',
            'plot_coherence_matrix.py = mintpy.cli.plot_coherence_matrix:main',
            'plot_network.py = mintpy.cli.plot_network:main',
            'plot_transection.py = mintpy.cli.plot_transection:main',
            'prep_aria.py = mintpy.cli.prep_aria:main',
            'prep_cosicorr.py = mintpy.cli.prep_cosicorr:main',
            'prep_fringe.py = mintpy.cli.prep_fringe:main',
            'prep_gamma.py = mintpy.cli.prep_gamma:main',
            'prep_gmtsar.py = mintpy.cli.prep_gmtsar:main',
            'prep_hyp3.py = mintpy.cli.prep_hyp3:main',
            'prep_isce.py = mintpy.cli.prep_isce:main',
            'prep_roipac.py = mintpy.cli.prep_roipac:main',
            'prep_snap.py = mintpy.cli.prep_snap:main',
            'reference_date.py = mintpy.cli.reference_date:main',
            'reference_point.py = mintpy.cli.reference_point:main',
            'remove_hdf5_dset.py = mintpy.cli.remove_hdf5_dset:main',
            'remove_ramp.py = mintpy.cli.remove_ramp:main',
            's1ab_range_bias.py = mintpy.cli.s1ab_range_bias:main',
            'save_gbis.py = mintpy.cli.save_gbis:main',
            'save_gdal.py = mintpy.cli.save_gdal:main',
            'save_gmt.py = mintpy.cli.save_gmt:main',
            'save_hdfeos5.py = mintpy.cli.save_hdfeos5:main',
            'save_kite.py = mintpy.cli.save_kite:main',
            'save_kmz.py = mintpy.cli.save_kmz:main',
            'save_kmz_timeseries.py = mintpy.cli.save_kmz_timeseries:main',
            'save_qgis.py = mintpy.cli.save_qgis:main',
            'save_roipac.py = mintpy.cli.save_roipac:main',
            'smallbaselineApp.py = mintpy.cli.smallbaselineApp:main',
            'solid_earth_tides.py = mintpy.cli.solid_earth_tides:main',
            'spatial_average.py = mintpy.cli.spatial_average:main',
            'spatial_filter.py = mintpy.cli.spatial_filter:main',
            'subset.py = mintpy.cli.subset:main',
            'temporal_average.py = mintpy.cli.temporal_average:main',
            'temporal_derivative.py = mintpy.cli.temporal_derivative:main',
            'temporal_filter.py = mintpy.cli.temporal_filter:main',
            'timeseries2velocity.py = mintpy.cli.timeseries2velocity:main',
            'timeseries_rms.py = mintpy.cli.timeseries_rms:main',
            'tropo_gacos.py = mintpy.cli.tropo_gacos:main',
            'tropo_phase_elevation.py = mintpy.cli.tropo_phase_elevation:main',
            'tropo_pyaps3.py = mintpy.cli.tropo_pyaps3:main',
            'tsview.py = mintpy.cli.tsview:main',
            'unwrap_error_bridging.py = mintpy.cli.unwrap_error_bridging:main',
            'unwrap_error_phase_closure.py = mintpy.cli.unwrap_error_phase_closure:main',
            'view.py = mintpy.cli.view:main',
        ]
    },

    # data files
    include_package_data=True,
    package_data={
        "mintpy": [
            "data/*.js",
            "data/*.png",
            "data/colormaps/*.cpt",
            "defaults/*.cfg",
            "defaults/*.yaml",
        ],
    },
    zip_safe=False,
)
