import '../../internal/internal.dart';
import '../../util/input_buffer.dart';
import 'gif_color_map.dart';

class GifImageDesc {
  int x;
  int y;
  int width;
  int height;
  bool interlaced;
  GifColorMap colorMap;
  int duration = 80;
  bool clearFrame = true;

  GifImageDesc(InputBuffer input) {
    x = input.readUint16();
    y = input.readUint16();
    width = input.readUint16();
    height = input.readUint16();

    int b = input.readByte();

    int bitsPerPixel = (b & 0x07) + 1;

    interlaced = (b & 0x40) != 0;

    if (b & 0x80 != 0) {
      colorMap = new GifColorMap(1 << bitsPerPixel);

      for (int i = 0; i < colorMap.numColors; ++i) {
        colorMap.setColor(i, input.readByte(), input.readByte(),
                          input.readByte());
      }
    }

    _inputPosition = input.position;
  }

  /// The position in the file after the ImageDesc for this frame.
  int _inputPosition;
}

@internal
class InternalGifImageDesc extends GifImageDesc {
  InternalGifImageDesc(InputBuffer input) : super(input);

  int get inputPosition => _inputPosition;
}
