require_relative 'stroke'

module WhirledPeas
  module UI
    class Canvas
      attr_reader :left, :top, :width, :height

      def initialize(left, top, width, height)
        @left = left
        @top = top
        @width = width
        @height = height
      end

      def stroke(left, top, chars)
        if left >= self.left + self.width || left + chars.length <= self.left
          Stroke::EMPTY
        elsif top < self.top || top >= self.top + self.height
          Stroke::EMPTY
        else
          if left < self.left
            chars = chars[self.left - left..-1]
            left = self.left
          end
          num_chars = [self.left + self.width, left + chars.length].min - left
          Stroke.new(left, top, Ansi.first(chars, num_chars))
        end
      end

      def inspect
        "Canvas(left=#{left}, top=#{top}, width=#{width}, height=#{height})"
      end
    end
  end
end