// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "starboard/blitter.h"
#include "starboard/common/log.h"

namespace {
// Round the given float to the nearest integer.
int round(float x) {
  return static_cast<int>(x + 0.5f);
}

// A periodic function that follows the same sawtooth pattern as the modulus
// function in both the postive and negative domain.
int positive_mod(int x, int m) {
  if (x >= 0) {
    return x % m;
  } else {
    int mod_out = (1 - (x / m)) * m + x;
    return mod_out == m ? 0 : mod_out;
  }
}

// The Tiler class is a helper class to determine how to chop up into tiles a
// source image into a destination rectangle.  The Tiler will pre-compute all
// the information needed to determine coordinates of individual tiles.  This
// makes it easy to have every SbBlitterBlitRectToRectTiled() call implemented
// by a SbBlitterBlitRectsToRects() call with one rect per tile.
class Tiler {
 public:
  Tiler(const SbBlitterRect& src_rect,
        const SbBlitterRect& dst_rect,
        int src_image_width,
        int src_image_height);

  // Returns the number of tiles in the respective dimensions, including partial
  // tiles.
  int num_x_tiles() const;
  int num_y_tiles() const;

  // Returns the rectangles for the source rectangle for the given tile
  // coordinate.
  SbBlitterRect src_rect(int x, int y) const;
  // Returns the rectangles for the destination rectangle for the given tile
  // coordinate.
  SbBlitterRect dst_rect(int x, int y) const;

 private:
  float dst_x(int x_index) const;
  float dst_y(int y_index) const;

  // Saved input parameters.
  int source_image_width_;
  int source_image_height_;
  SbBlitterRect dst_rect_;

  // The positions within the source image of the first tile, where we start.
  int src_first_x_;
  int src_first_y_;

  // The positions within the source image of the last tile, where we end.
  int src_last_y_;
  int src_last_x_;

  // The number of tiles in each direction, counting partial tiles.
  int num_x_tiles_;
  int num_y_tiles_;

  // The size of the first (possibly partial) tile, in destination pixels.
  float dst_x_first_width_;
  float dst_y_first_height_;

  // The size of a full tile, in destination pixels.
  float dst_tile_width_;
  float dst_tile_height_;
};

Tiler::Tiler(const SbBlitterRect& src_rect,
             const SbBlitterRect& dst_rect,
             int src_image_width,
             int src_image_height) {
  // Precompute all our helper values here in the constructor.
  source_image_width_ = src_image_width;
  source_image_height_ = src_image_height;
  dst_rect_ = dst_rect;

  src_first_x_ = positive_mod(src_rect.x, src_image_width);
  int num_x_full_tiles =
      (src_rect.width -
       (src_first_x_ != 0 ? (src_image_width - src_first_x_) : 0)) /
      src_image_width;
  src_last_x_ = positive_mod(src_rect.width - (src_image_width - src_first_x_),
                             src_image_width);
  if (src_last_x_ == 0) {
    src_last_x_ = src_image_width;
  }

  num_x_tiles_ =
      (num_x_full_tiles > 0
           ? num_x_full_tiles + (src_first_x_ != 0 ? 1 : 0) +
                 (src_last_x_ != src_image_width ? 1 : 0)
           : (src_first_x_ + src_rect.width > src_image_width ? 2 : 1));

  src_first_y_ = positive_mod(src_rect.y, src_image_height);
  int num_y_full_tiles =
      (src_rect.height -
       (src_first_y_ != 0 ? (src_image_height - src_first_y_) : 0)) /
      src_image_height;
  src_last_y_ = positive_mod(
      src_rect.height - (src_image_height - src_first_y_), src_image_height);
  if (src_last_y_ == 0) {
    src_last_y_ = src_image_height;
  }

  num_y_tiles_ =
      (num_y_full_tiles > 0
           ? num_y_full_tiles + (src_first_y_ != 0 ? 1 : 0) +
                 (src_last_y_ != src_image_height ? 1 : 0)
           : (src_first_y_ + src_rect.height > src_image_height ? 2 : 1));

  dst_tile_width_ =
      (static_cast<float>(src_image_width) / src_rect.width) * dst_rect.width;
  dst_x_first_width_ =
      dst_tile_width_ *
      (static_cast<float>(src_image_width - src_first_x_) / src_image_width);

  dst_tile_height_ = (static_cast<float>(src_image_height) / src_rect.height) *
                     dst_rect.height;
  dst_y_first_height_ =
      dst_tile_height_ *
      (static_cast<float>(src_image_height - src_first_y_) / src_image_height);
}

int Tiler::num_x_tiles() const {
  return num_x_tiles_;
}

int Tiler::num_y_tiles() const {
  return num_y_tiles_;
}

SbBlitterRect Tiler::src_rect(int x, int y) const {
  SbBlitterRect ret;

  ret.x = (x == 0 ? src_first_x_ : 0);
  ret.width =
      (x == num_x_tiles() - 1 ? src_last_x_ : source_image_width_) - ret.x;

  ret.y = (y == 0 ? src_first_y_ : 0);
  ret.height =
      (y == num_y_tiles() - 1 ? src_last_y_ : source_image_height_) - ret.y;

  return ret;
}

SbBlitterRect Tiler::dst_rect(int x, int y) const {
  SbBlitterRect ret;
  int x1 = round(dst_x(x));
  int x2 = round(dst_x(x + 1));
  int y1 = round(dst_y(y));
  int y2 = round(dst_y(y + 1));

  ret.x = x1;
  ret.y = y1;
  ret.width = x2 - x1;
  ret.height = y2 - y1;

  return ret;
}

float Tiler::dst_x(int x_index) const {
  if (x_index == 0) {
    return static_cast<float>(dst_rect_.x);
  } else if (x_index == num_x_tiles()) {
    return static_cast<float>(dst_rect_.x + dst_rect_.width);
  } else if (x_index == 1) {
    return dst_rect_.x + dst_x_first_width_;
  } else {
    return dst_rect_.x + dst_x_first_width_ + dst_tile_width_ * (x_index - 1);
  }
}

float Tiler::dst_y(int y_index) const {
  if (y_index == 0) {
    return static_cast<float>(dst_rect_.y);
  } else if (y_index == num_y_tiles()) {
    return static_cast<float>(dst_rect_.y + dst_rect_.height);
  } else if (y_index == 1) {
    return dst_rect_.y + dst_y_first_height_;
  } else {
    return dst_rect_.y + dst_y_first_height_ + dst_tile_height_ * (y_index - 1);
  }
}

}  // namespace

// Implement the tiling by splitting our draw area into individual tiles
// and rendering each one explicitly via SbBlitterBlitRectsToRects().
bool SbBlitterBlitRectToRectTiled(SbBlitterContext context,
                                  SbBlitterSurface source_surface,
                                  SbBlitterRect src_rect,
                                  SbBlitterRect dst_rect) {
  if (!SbBlitterIsContextValid(context)) {
    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid context.";
    return false;
  }
  if (!SbBlitterIsSurfaceValid(source_surface)) {
    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid texture.";
    return false;
  }
  if (src_rect.width <= 0 || src_rect.height <= 0) {
    SB_DLOG(ERROR) << __FUNCTION__ << ": Source width and height must both be "
                   << "greater than 0.";
    return false;
  }
  if (dst_rect.width < 0 || dst_rect.height < 0) {
    SB_DLOG(ERROR) << __FUNCTION__ << ": Destination width and height must "
                   << "both be greater than or equal to 0.";
    return false;
  }

  SbBlitterSurfaceInfo surface_info;
  SbBlitterGetSurfaceInfo(source_surface, &surface_info);

  Tiler tiler(src_rect, dst_rect, surface_info.width, surface_info.height);

  int num_tiles = tiler.num_x_tiles() * tiler.num_y_tiles();
  SbBlitterRect* src_rects = new SbBlitterRect[num_tiles];
  SbBlitterRect* dst_rects = new SbBlitterRect[num_tiles];

  int current_tile = 0;
  for (int y = 0; y < tiler.num_y_tiles(); ++y) {
    for (int x = 0; x < tiler.num_x_tiles(); ++x) {
      src_rects[current_tile] = tiler.src_rect(x, y);
      dst_rects[current_tile] = tiler.dst_rect(x, y);
      ++current_tile;
    }
  }

  bool result = SbBlitterBlitRectsToRects(context, source_surface, src_rects,
                                          dst_rects, num_tiles);

  delete[] src_rects;
  delete[] dst_rects;

  return result;
}
