package cnp.ew.text;

import java.awt.*;

class CpEntryFieldTextModel
{
    public static final int SIZE_INCREMENT = 80;

    public char[] chars;
    public int length = 0;


    public int getTextLength()
    {
        return length;
    }

    public String getText()
    {
        return new String(chars, 0, length);
    }

    public Point getWordSelectionHitBy(int index)
    {
        int start, end;

        start=index;
        boolean wantSpace = Character.isSpace(chars[index]);

        while (start > 0 && Character.isSpace(chars[start - 1]) == wantSpace) {
            start--;
        }

        end = index + 1;
        while (end < length && Character.isSpace(chars[end]) == wantSpace) {
            end++;
        }

        return new Point(start, Math.min(length, end));
    }


    public void deleteChars(int from, int to)
    {
        int numCharsToDel = to - from + 1;

        length -= numCharsToDel;
        for (int i = from; i <= length; i++) {
            chars[i] = chars[i + numCharsToDel];
        }
    }

    public void insertChar(char c, int insertAt)
    {
        if (length == chars.length) {
            char [] newChars = new char[length + SIZE_INCREMENT];
            System.arraycopy(chars, 0, newChars, 0, length);
            chars = newChars;
        }

        if (insertAt != length) {
            for (int i = length; i > insertAt; i--) {
                chars[i] = chars[i - 1];
            }
        }
        length++;
        chars[insertAt] = c;
    }

    public String getSubstring(int startInclusive, int endExclusive)
    {
        return new String(chars, startInclusive, endExclusive - startInclusive);
    }

    public void insertString(String s, int insertAt)
    {
        char [] newChars = new char[Math.max(length + s.length(), length + SIZE_INCREMENT)];

        if (insertAt > 0) {
            System.arraycopy(chars, 0, newChars, 0, insertAt);
        }
        System.arraycopy(s.toCharArray(), 0, newChars, insertAt, s.length());
        if (insertAt < length) {
            System.arraycopy(chars, insertAt, newChars, insertAt + s.length(), length - insertAt);
        }
        chars = newChars;
        length += s.length();
    }


    public void setText(String s)
    {
        if (s.length() > chars.length) {
            chars = new char[s.length()];
        }

        for (int i = 0; i<s.length(); i++) {
            chars[i] = s.charAt(i);
        }
        length = s.length();
    }

    public CpEntryFieldTextModel()
    {
        chars = new char[SIZE_INCREMENT];
        length = 0;
    }

    public String toString()
    {
        return "textModel [" + new String(chars, 0, length) + "]";
    }
}

