#!/usr/bin/python3
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Configuration helper for Syncthing.
"""

import argparse
import grp
import os
import pwd
import shutil
import subprocess


def parse_arguments():
    """Return parsed command line arguments as dictionary."""
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')

    subparsers.add_parser('setup', help='Setup Syncthing')

    subparsers.required = True
    return parser.parse_args()


def subcommand_setup(_):
    """Actions to be performed before installing Syncthing"""
    data_dir = '/var/lib/syncthing'

    # Create syncthing group if needed.
    try:
        grp.getgrnam('syncthing')
    except KeyError:
        subprocess.run(['addgroup', '--system', 'syncthing'], check=True)

    # Create syncthing user if needed.
    try:
        pwd.getpwnam('syncthing')
    except KeyError:
        subprocess.run([
            'adduser', '--system', '--ingroup', 'syncthing', '--home',
            '/var/lib/syncthing', '--gecos',
            'Syncthing file synchronization server', 'syncthing'
        ], check=True)

    if not os.path.exists(data_dir):
        os.makedirs(data_dir, mode=0o750)
        shutil.chown(data_dir, user='syncthing', group='syncthing')


def main():
    """Parse arguments and perform all duties."""
    arguments = parse_arguments()

    subcommand = arguments.subcommand.replace('-', '_')
    subcommand_method = globals()['subcommand_' + subcommand]
    subcommand_method(arguments)


if __name__ == '__main__':
    main()
