class Selenium::WebDriver::Support::Color

def self.from_hsl(h, s, l, a) # rubocop:disable Naming/MethodParameterName

rubocop:disable Naming/MethodParameterName
def self.from_hsl(h, s, l, a) # rubocop:disable Naming/MethodParameterName
  h = Float(h) / 360
  s = Float(s) / 100
  l = Float(l) / 100
  a = Float(a || 1)
  if s.zero?
    r = l
    g = r
    b = r
  else
    luminocity2 = l < 0.5 ? l * (s + 1) : l + s - (l * s)
    luminocity1 = (l * 2) - luminocity2
    r = hue_to_rgb(luminocity1, luminocity2, h + (1.0 / 3.0))
    g = hue_to_rgb(luminocity1, luminocity2, h)
    b = hue_to_rgb(luminocity1, luminocity2, h - (1.0 / 3.0))
  end
  new (r * 255).round, (g * 255).round, (b * 255).round, a
end

def self.from_string(str)

def self.from_string(str)
  case str
  when RGB_PATTERN
    new Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)
  when RGB_PCT_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| Float(e) / 100 * 255 })
  when RGBA_PATTERN
    new Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3), Regexp.last_match(4)
  when RGBA_PCT_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| Float(e) / 100 * 255 } << Regexp.last_match(4))
  when HEX_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| e.to_i(16) })
  when HEX3_PATTERN
    array = [Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3)]
    new(*array.map { |e| (e * 2).to_i(16) })
  when HSL_PATTERN, HSLA_PATTERN
    from_hsl(Regexp.last_match(1), Regexp.last_match(2), Regexp.last_match(3), Regexp.last_match(4))
  else
    raise ArgumentError, "could not convert #{str.inspect} into color"
  end
end

def self.hue_to_rgb(lum1, lum2, hue)

def self.hue_to_rgb(lum1, lum2, hue)
  hue += 1 if hue < 0.0
  hue -= 1 if hue > 1.0
  if hue < 1.0 / 6.0
    (lum1 + ((lum2 - lum1) * 6.0 * hue))
  elsif hue < 1.0 / 2.0
    lum2
  elsif hue < 2.0 / 3.0
    lum1 + ((lum2 - lum1) * ((2.0 / 3.0) - hue) * 6.0)
  else
    lum1
  end
end

def ==(other)

def ==(other)
  return true if equal?(other)
  return false unless other.is_a?(self.class)
  [red, green, blue, alpha] == [other.red, other.green, other.blue, other.alpha]
end

def hash

def hash
  [red, green, blue, alpha, self.class].hash
end

def hex

def hex
  format '#%<red>02x%<green>02x%<blue>02x', red: red, green: green, blue: blue
end

def initialize(red, green, blue, alpha = 1)

def initialize(red, green, blue, alpha = 1)
  @red = Integer(red)
  @green = Integer(green)
  @blue = Integer(blue)
  @alpha = Float(alpha)
end

def rgb

def rgb
  "rgb(#{red}, #{green}, #{blue})"
end

def rgba

def rgba
  a = alpha == 1 ? '1' : alpha
  "rgba(#{red}, #{green}, #{blue}, #{a})"
end