# frozen_string_literal: true

module Axlsx
  # A simple, self serializing class for storing TextRuns
  class RichText < SimpleTypedList
    # creates a new RichText collection
    # @param [String] text -optional The text to use in creating the first RichTextRun
    # @param [Object] options -optional The options to use in creating the first RichTextRun
    # @yield [RichText] self
    def initialize(text = nil, options = {})
      super(RichTextRun)
      add_run(text, options) unless text.nil?
      yield self if block_given?
    end

    # The cell that owns this RichText collection
    attr_reader :cell

    # Assign the cell for this RichText collection
    # @param [Cell] cell The cell which all RichTextRuns in the collection will belong to
    def cell=(cell)
      @cell = cell
      each { |run| run.cell = cell }
    end

    # Calculates the longest autowidth of the RichTextRuns in this collection
    # @return [Number]
    def autowidth
      widtharray = [0] # Are arrays the best way of solving this problem?
      each { |run| run.autowidth(widtharray) }
      widtharray.max
    end

    # Creates and adds a RichTextRun to this collectino
    # @param [String] text The text to use in creating a new RichTextRun
    # @param [Object] options The options to use in creating the new RichTextRun
    def add_run(text, options = {})
      self << RichTextRun.new(text, options)
    end

    # The RichTextRuns we own
    # @return [RichText]
    def runs
      self
    end

    # renders the RichTextRuns in this collection
    # @param [String] str
    # @return [String]
    def to_xml_string(str = +'')
      each { |run| run.to_xml_string(str) }
      str
    end
  end
end
