import json
from logging import getLogger

from .torque import Torque

log = getLogger(__name__)


class OpenPBS(Torque):

    ERROR_MESSAGE_UNRECOGNIZED_ARG = 'Unrecognized long argument passed to OpenPBS CLI plugin: %s'

    def get_status(self, job_ids=None):
        return 'qstat -f -F json'

    def get_single_status(self, job_id):
        return f'qstat -f {job_id}'

    def parse_status(self, status, job_ids):
        try:
            data = json.loads(status)
        except Exception:
            log.warning(f'No valid qstat JSON return from `qstat -f -F json`, got the following: {status}')
        rval = {}
        for job_id, job in data.get('Jobs', {}).items():
            if job_id in job_ids:
                # map PBS job states to Galaxy job states.
                rval[id] = self._get_job_state(job['job_state'])
        return rval


__all__ = ('OpenPBS',)
