# This file is part of cpu_cores released under the MIT license.
# See the LICENSE file for more information.

import shlex
import subprocess

from cpu_cores.common import CPUCoresCounter

CPUINFO_COMMAND = "/usr/sbin/system_profiler" \
                  " -detailLevel full SPHardwareDataType"


class DarwinCPUCoresCounter(CPUCoresCounter):

    def _count(self, command=None):
        if command is None:
            command = CPUINFO_COMMAND
        s = subprocess.Popen(shlex.split(command),
                             stdout=subprocess.PIPE,
                             stderr=subprocess.PIPE)
        if s:
            out, err = s.communicate()
            if len(err.strip()) > 0 or len(out.strip()) == 0:
                raise Exception('impossible to get the cpu cores count' +
                                '(darwin) (error message = %s)' % err.strip())
            lines = out.split(b'\n')
            for line in lines:
                tmp = line.strip()
                if tmp.startswith(b'Total Number of Cores:'):
                    self._physical_cores_count = int(tmp.split(b':')[1])
                if tmp.startswith(b'Number of Processors:'):
                    self._physical_processors_count = int(tmp.split(b':')[1])
        if self._physical_processors_count is None or \
                self._physical_cores_count is None:
            raise Exception('impossible to get the cpu cores count (darwin)')
