#!/usr/bin/python
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

"""
Plinth setup file
"""

from distutils import log
from distutils.command.install_data import install_data
import glob
import os
from setuptools import find_packages, setup
import shutil

from plinth import __version__


DIRECTORIES_TO_CREATE = [
    '/var/lib/plinth',
    '/var/lib/plinth/sessions',
    '/var/log/plinth',
]

DIRECTORIES_TO_COPY = [
    ('/usr/share/plinth/static', 'static'),
    ('/usr/share/doc/plinth/', 'doc'),
]


class CustomInstallData(install_data):
    """Override install command to allow directory creation"""
    def run(self):
        """Execute install command"""
        install_data.run(self)  # Old style base class

        # Create empty directories
        for directory in DIRECTORIES_TO_CREATE:
            if not os.path.exists(directory):
                log.info("creating directory '%s'", directory)
                os.makedirs(directory)

        # Recursively copy directories
        for target, source in DIRECTORIES_TO_COPY:
            if not os.path.exists(target):
                log.info("recursive copy '%s' to '%s'", source, target)
                shutil.copytree(source, target)


setup(
    name='Plinth',
    version=__version__,
    description='A web front end for administering FreedomBox',
    url='http://freedomboxfoundation.org',
    packages=find_packages(),
    scripts=['bin/plinth'],
    test_suite='plinth.tests.TEST_SUITE',
    license='COPYING',
    classifiers=[
        'Development Status :: 3 - Alpha',
        'Environment :: Web Environment',
        'Framework :: Django',
        'Intended Audience :: End Users/Desktop',
        'License :: DFSG approved',
        'License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)',
        'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
        'Natural Language :: English',
        'Operating System :: POSIX :: Linux',
        'Programming Language :: Python',
        'Programming Language :: Unix Shell',
        'Topic :: Internet :: WWW/HTTP :: WSGI :: Application',
        'Topic :: System :: Systems Administration',
    ],
    install_requires=[
        'cherrypy >= 3.0',
        'django >= 1.6.0',
        'django-bootstrap-form',
        'withsqlite',
    ],
    package_data={'plinth': ['modules/enabled/*',
                             'templates/*',
                             'modules/*/templates/*']},
    data_files=[('/etc/init.d', ['data/etc/init.d/plinth']),
                ('/usr/lib/freedombox/setup.d/',
                 ['data/usr/lib/freedombox/setup.d/86_plinth']),
                ('/usr/lib/freedombox/first-run.d',
                 ['data/usr/lib/freedombox/first-run.d/90_firewall']),
                ('/etc/apache2/sites-available',
                 ['data/etc/apache2/sites-available/plinth.conf',
                  'data/etc/apache2/sites-available/plinth-ssl.conf']),
                ('/etc/sudoers.d', ['data/etc/sudoers.d/plinth']),
                ('/usr/share/plinth/actions',
                 glob.glob(os.path.join('actions', '*'))),
                ('/usr/share/man/man1', ['doc/plinth.1']),
                ('/etc/plinth', ['data/etc/plinth/plinth.config'])],
    cmdclass={'install_data': CustomInstallData},
)
