module hunt.http.codec.http.encode.Http1FieldPreEncoder;

import hunt.http.HttpHeader;
import hunt.http.HttpVersion;
import hunt.http.codec.http.encode.HttpFieldPreEncoder;


class Http1FieldPreEncoder : HttpFieldPreEncoder {

	override
	HttpVersion getHttpVersion() {
		return HttpVersion.HTTP_1_0;
	}

	override
	byte[] getEncodedField(HttpHeader header, string headerString, string value) {
		if (header != HttpHeader.Null) {
			byte[] bytesColonSpace = header.getBytesColonSpace();
			// int cbl = bytesColonSpace.length;
			// int newLength = cbl + value.length() + 2;
			// byte[] bytes = Arrays.copyOf(header.getBytesColonSpace(), cbl + value.length() + 2);
			// System.arraycopy(value.getBytes(UTF_8), 0, bytes, cbl, value.length());
			// byte[] bytes = new byte[newLength];
			// bytes[0..cbl] = bytesColonSpace[0..cbl];
			// bytes[cbl .. cbl+value.length] = value[];
			
			// bytes[bytes.length - 2] = cast(byte) '\r';
			// bytes[bytes.length - 1] = cast(byte) '\n';

			byte[] bytes = bytesColonSpace ~ cast(byte[])(value ~ "\r\n").dup;
			return bytes;
		}

		byte[] n = cast(byte[])headerString;
		byte[] v = cast(byte[])value;
		byte[] bytes = new byte[n.length + 2 + v.length + 2]; // Arrays.copyOf(n, n.length + 2 + v.length + 2);
		bytes[0..n.length] = n[0..$];

		bytes[n.length] = cast(byte) ':';
		bytes[n.length] = cast(byte) ' ';
		bytes[bytes.length - 2] = cast(byte) '\r';
		bytes[bytes.length - 1] = cast(byte) '\n';
		return bytes;
	}
}