# -*- coding: utf-8 -*-
# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vi: set ft=python sts=4 ts=4 sw=4 et:
"""
The workbench module provides classes for interfacing with `connectome workbench
<https://www.humanconnectome.org/software/connectome-workbench>`_ tools.

Connectome Workbench is an open source, freely available visualization and
discovery tool used to map neuroimaging data, especially data generated by the
Human Connectome Project.
"""

import os
import re

from ... import logging
from ...utils.filemanip import split_filename
from ..base import CommandLine, PackageInfo

iflogger = logging.getLogger("nipype.interface")


class Info(PackageInfo):
    """Handle Connectome Workbench version information."""

    version_cmd = "wb_command -version"

    @staticmethod
    def parse_version(raw_info):
        m = re.search(r"\nVersion (\S+)", raw_info)
        return m.groups()[0] if m else None


class WBCommand(CommandLine):
    """Base support for workbench commands."""

    @property
    def version(self):
        return Info.version()

    def _gen_filename(self, name, outdir=None, suffix="", ext=None):
        """Generate a filename based on the given parameters.
        The filename will take the form: <basename><suffix><ext>.
        Parameters
        ----------
        name : str
            Filename to base the new filename on.
        suffix : str
            Suffix to add to the `basename`.  (defaults is '' )
        ext : str
            Extension to use for the new filename.
        Returns
        -------
        fname : str
            New filename based on given parameters.
        """
        if not name:
            raise ValueError("Cannot generate filename - filename not set")

        _, fname, fext = split_filename(name)
        if ext is None:
            ext = fext
        if outdir is None:
            outdir = "."
        return os.path.join(outdir, fname + suffix + ext)
