# built-in
from argparse import REMAINDER, ArgumentParser

# app
from ..actions import make_json
from ..config import builders
from ..repositories import get_repo
from .base import BaseCommand


class PackageSearchCommand(BaseCommand):
    """Search packages on PyPI.org or Anaconda Cloud.
    """
    @staticmethod
    def build_parser(parser) -> ArgumentParser:
        builders.build_config(parser)
        builders.build_output(parser)
        builders.build_api(parser)
        builders.build_other(parser)
        parser.add_argument('name', nargs=REMAINDER, help='package name or other search keywords')
        return parser

    def __call__(self) -> bool:
        repo = get_repo(name=self.config.get('repo', 'pypi'))
        results = repo.search(self.args.name)
        if not results:
            self.logger.error('no results')
            return False
        print(make_json(
            data=results,
            key=self.config.get('filter'),
            colors=not self.config['nocolors'],
            table=self.config['table'],
        ))
        return True