import struct

from sbigpy.readout_mode import Readout_Mode

class Cpu_Info:
    def __init__(self):
        self.version = 0
        self.cpu = 0
        self.firmware_version = 0
        self.name = ''
        self.has_shutter = False
        self.needs_offset = False
        self.variable_dcs = False
        self.variable_dcr = False
        self.has_temp_control = False
        self.max_te_drive = 0
        self.image_width = 0
        self.image_height = 0
        self.readout_modes = 0

    def unpack(self, data):
        (self.version,
         self.cpu,
         self.firmware_version,
         self.name,
         self.has_shutter,
         self.needs_offset,
         self.variable_dcs,
         self.variable_dcr,
         self.has_temp_control,
         self.max_te_drive,
         self.image_width,
         self.image_height) = struct.unpack('<HHH32sHHHHHHHH', data[0:54])
        self.name = self.name.decode('ascii')
        (rmc,) = struct.unpack('<H', data[54:56])
        self.readout_modes = []
        for i in range(0, rmc):
            rm = Readout_Mode()
            rm.unpack(data[56 + i * 16: 56 + (i + 1) * 16])
            self.readout_modes += [rm, ]

    def prettyprint(self):
        print("CPU version: %d" % self.version)
        print("CPU: %d" % self.cpu)
        print("Firmware version: %d" % self.firmware_version)
        print("Name: %s" % self.name)
        print("Shutter: %d" % self.has_shutter)
        print("Needs offset: %d" % self.needs_offset)
        print("DCS: %d" % self.variable_dcs)
        print("DCR: %d" % self.variable_dcr)
        print("Temp control supported: %d" % self.has_temp_control)
        print("Max TE drive: %d" % self.max_te_drive)
        print("Image width: %d" % self.image_width)
        print("Image height: %d" % self.image_height)
        print("Read out modes:")
        i = 0
        for rm in self.readout_modes:
            print("--- Mode %d: ---" % i)
            rm.prettyprint()
            i += 1
        print("--- -------- ---")