package utils;

import java.awt.Graphics;
import java.awt.FontMetrics;
import java.util.ArrayList;

public class WrappedString
{
    private ArrayList<String> lstStrings;
    private FontMetrics metrics;
    
    public WrappedString(String str, final FontMetrics metrics, final int width) {
        this.lstStrings = new ArrayList<String>();
        this.metrics = metrics;
        while (!str.equals("")) {
            int cur = 1;
            int lastSpace = -1;
            while (cur <= str.length() && metrics.stringWidth(str.substring(0, cur)) < width) {
                if (str.substring(cur - 1, cur).equals(" ")) {
                    lastSpace = cur - 1;
                }
                ++cur;
            }
            if (lastSpace == -1 || cur > str.length()) {
                this.lstStrings.add(str.substring(0, cur - 1));
                str = str.substring(cur - 1);
            }
            else {
                this.lstStrings.add(str.substring(0, lastSpace));
                str = str.substring(lastSpace + 1);
            }
            while (str.length() > 0 && str.substring(0, 1).equals(" ")) {
                str = str.substring(1);
            }
        }
    }
    
    public int getLineCount() {
        return this.lstStrings.size();
    }
    
    public String getLine(final int index) {
        return this.lstStrings.get(index);
    }
    
    public FontMetrics getMetrics() {
        return this.metrics;
    }
    
    public void draw(final Graphics g, final int x, final int y) {
        for (int i = 0; i < this.getLineCount(); ++i) {
            g.drawString(this.getLine(i), x, y + i * this.metrics.getHeight());
        }
    }
}
