import math
from .utils import *

class Pixel(object):
    def __init__(self, r, g, b):
        d = max(r, max(g, b))
        if (d < EPS):
            self.r = 0
            self.g = 0
            self.b = 0
            self.e = 0
            return

        m, ie = math.frexp(d)
        d = m * 256.0 / d

        self.r = int(clamp(r * d, (0, 255)))
        self.g = int(clamp(g * d, (0, 255)))
        self.b = int(clamp(b * d, (0, 255)))
        self.e = int(clamp(ie + 128, (0, 255)))

    def get(self, i):
        return self.__getitem__(i)

    def __getitem__(self, i):
        if i == 0: return self.r
        if i == 1: return self.g
        if i == 2: return self.b
        if i == 3: return self.e
        raise Exception('Pixel has only 4 channels. {0} specified.'.format(i))