# Copyright (C) 2016-2018 Denis Gasparin <denis@gasparin.net>
#
# This file is part of Pgrepup.
#
# Pgrepup 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 3 of the License, or
# (at your option) any later version.
#
# Pgrepup 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Pgrepup. If not, see <http://www.gnu.org/licenses/>.
import os
import sys
try:  # Python 2
    from ConfigParser import SafeConfigParser
    from StringIO import StringIO
except ImportError:  # Python 3
    from configparser import SafeConfigParser
    from io import StringIO


this = sys.modules[__name__]
this.config = None
this.filename = None


class ConfigFileNotFound(Exception):
    pass


def create():
    this.config = SafeConfigParser()
    return this.config


def load(filename):
    this.config = SafeConfigParser()
    load_result = this.config.read(os.path.expanduser(filename))
    if len(load_result) != 1:
        raise ConfigFileNotFound("The configuration file %s does not exist" % filename)
    this.filename = os.path.expanduser(filename)


def config():
    return this.config


def get_tmp_folder():
    return os.path.expanduser(this.config.get('Security', 'tmp_folder'))


def save(filename=None, print_save_result=True):
    if filename is None and this.filename is None:
        raise ConfigFileNotFound("Missing config file to write to")

    if filename is None:
        filename = this.filename

    cfg_file = open(filename, 'w')
    this.config.write(cfg_file)
    cfg_file.close()
    os.chmod(filename, 0o600)

    if print_save_result:
        print("Configuration saved to %s." % filename)
        print("You can now use the check command to verify setup of source and destination databases")
