#!/usr/bin/env python

from setuptools import setup, find_packages
from setuptools.command.install import install
from os import system
from setuptools import setup

__name__ = 'lib-osm-openvim'
__version__ = '1.0.0'
__description__ = 'OSM Openvim library'
__author__ = 'ETSI OSM'
__author_email__ = 'alfonso.tiernosepulveda@telefonica.com'
__maintainer__ = 'mirabal'
__maintainer_email__ = 'leonardo.mirabal@altran.com'
__license__ = 'Apache 2.0'
__url__ = 'https://osm.etsi.org/gitweb/?p=osm/openvim.git;a=summary'

cmd = 'cp ovim.py ovim'
system(cmd)

__data_files__ = [('osm/openvim/', ['openvimd.cfg']),
                  ('osm/openvim/database_utils/', ['database_utils/vim_db_structure.sql',
                                                   'database_utils/nets.sql',
                                                   'database_utils/of_ports_pci_correspondence.sql',
                                                   'database_utils/host_ranking.sql',
                                                   'database_utils/dump_db.sh',
                                                   'database_utils/init_vim_db.sh',
                                                   'database_utils/migrate_vim_db.sh',
                                                   'database_utils/install-db-server.sh'
                                                   ]),
                  ('osm/openvim/scripts/', ['scripts/service-openvim.sh',
                                            'scripts/openvim-report.sh',
                                            'scripts/service-floodlight.sh',
                                            'scripts/service-opendaylight.sh',
                                            'scripts/initopenvim.sh'
                                            ]),
                  ]


_req = [
    "asn1crypto",
    "cffi",
    "enum34",
    "functools32",
    "idna",
    "ipaddress",
    "packaging",
    "pbr",
    "pkgconfig",
    "pyasn1",
    "pycparser",
    "pycrypto",
    "pyparsing",
    "six",
    "jsonschema",
    "argcomplete",
    "requests",
    "PyYAML",
    "requestsexceptions",
    "netaddr",
    "bottle",
    "MySQL-python",
    "paramiko",
    "libvirt-python"
]

__scripts__ = ['openflow', 'openvim', 'ovim']


class LibOpenvimInstaller(install):
    lite = None
    user_options = install.user_options + [('lite', None, "Don't install without Machine Learning modules.")]

    def initialize_options(self):
        self.lite = None
        install.initialize_options(self)

    def finalize_options(self):
        install.finalize_options(self)

    def run(self):

        cmd = 'ln -sf -v /usr/local/osm/openvim/openvimd.cfg /etc/default/openvimd.cfg'
        system(cmd)
        cmd = 'ln -sf -v /usr/local/osm/openvim/openflow /usr/bin/openflow'
        system(cmd)
        cmd = 'ln -sf -v /usr/local/osm/openvim/ovim.py /usr/bin/ovim'
        system(cmd)

        install.run(self)


setup(name=__name__,
      version=__version__,
      description=__description__,
      long_description=__description__,
      author=__author__,
      author_email=__author_email__,
      license=__license__,
      maintainer=__maintainer__,
      maintainer_email=__maintainer_email__,
      url=__url__,
      py_modules=['ovim',
                  'openvimd',
                  'vim_db',
                  'httpserver',
                  'RADclass',
                  'auxiliary_functions',
                  'dhcp_thread',
                  'definitionsClass',
                  'host_thread',
                  'vim_schema',
                  'ovim',
                  'openflow_thread',
                  'openflow_conn',
                  'onos',
                  'ODL',
                  'floodlight',
                  ],
      packages=find_packages() + ['database_utils'] + ['scripts'],
      package_dir={__name__: __name__},
      package_data={'database_utils': ['*'], 'scripts': ['*']},
      scripts=__scripts__,
      data_files=__data_files__,
      include_package_data=True,
      cmdclass={'install': LibOpenvimInstaller},
      install_requires=_req
      )


