from .base import SubCommandBase
from ..utils import format

class SubCommand(SubCommandBase):
    name = "search"

    def main(self):
        self.search(self.args.name[0], package_type=self.args.package_type, platform=self.args.platform,
                    limit=self.args.limit, offset=self.args.offset, sort=self.args.sort)

    def search(self, name, limit=50, offset=0, sort="-download_count",
               package_type=None, platform=None):
        data = self.api.get_artifacts(name, limit=limit, offset=offset, sort=sort)
        packages = data.pop('items')
        data['limit'] = limit
        data['offset'] = offset
        data['sort'] = sort
        format.format_packages(packages, data, self.log)

    def add_parser(self, subparsers):
        parser = subparsers.add_parser(
            self.name,
            help='Search in your Anaconda repository',
            description='Search in your Anaconda repository',
            epilog=__doc__
        )
        parser.add_argument('name', nargs=1, type=str, help='Search string')
        parser.add_argument(
            '-o', '--offset', default=0, type=int,
            help='Offset when displaying the results'
        )
        parser.add_argument(
            '-l', '--limit', default=50, type=int,
            help='Offset when displaying the results'
        )
        parser.add_argument(
            '-s', '--sort', default='download_count', type=str,
            help='Offset when displaying the results'
        )
        parser.add_argument(
            '-t', '--package-type', choices=['conda', 'pypi'],
            help='only search for packages of this type'
        )
        parser.add_argument(
            '-p', '--platform',
            choices=['osx-64', 'win-32', 'win-64', 'linux-32', 'linux-64', 'linux-armv6l',
                     'linux-armv7l', 'linux-ppc64le', 'linux-ppc64', 'linux-s390x',
                     'linux-aarch64', 'osx-arm64', 'zos-z', 'noarch'],
            help='only search for packages of the chosen platform'
        )
        parser.set_defaults(main=self.main)
