# Core SVG data for the USPS Ensign.
#
# This class should never need to be called directly.
# @private
class USPSFlags::Core::Ensign
  def svg
    <<~SVG
      #{stripes}
      <g transform="scale(0.3675)">
        <g transform="translate(1200, 600)">
          <g transform="rotate(-45, 693, 1500)">
            #{USPSFlags::Core::Anchor.new(color: :white).svg}
          </g>
        </g>
      </g>
      #{star_circle}
    SVG
  end

  private
  def stripes
    <<~SVG
      <rect x="0" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*1/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*2/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*3/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*4/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*5/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*6/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*7/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*8/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*9/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*10/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="#{USPSFlags::Config::BASE_FLY*11/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#FFFFFF" />
      <rect x="#{USPSFlags::Config::BASE_FLY*12/13}" y="0" width="#{USPSFlags::Config::BASE_FLY/13}" height="#{USPSFlags::Config::BASE_HOIST}" fill="#{USPSFlags::Config::BLUE}" />
      <rect x="0" y="0" width="#{USPSFlags::Config::BASE_FLY*6/13}" height="1000" fill="#{USPSFlags::Config::RED}" />
    SVG
    # <circle cx="#{USPSFlags::Config::BASE_FLY*3/13}" cy="#{USPSFlags::Config::BASE_HOIST/4}" r="#{USPSFlags::Config::BASE_FLY*6/13*5/16}" fill="#FFFFFF" fill-opacity="0.6" />
  end

  def star_circle
    svg = ""
    (0..13).each do |i|
      rotation = i * (360.0 / 13)
      svg << <<~SVG
        <g transform="scale(0.375)">
          <g transform="translate(1885, 465)">
            <g transform="rotate(#{rotation}, 0, 900)">
              #{USPSFlags::Core::Star.new.svg}
            </g>
          </g>
        </g>
      SVG
    end
    svg
  end
end