export class URLVariables {
	private _variables: Object = new Object();

	/**
	 *
	 * @param source
	 */
	constructor(source: string = null) {
		if (source !== null)
			this.decode(source);
	}

	/**
	 *
	 * @param source
	 */
	public decode(source: string): void {
		source = source.split('+').join(' ');

		const re = /[?&]?([^=]+)=([^&]*)/g;
		let tokens;

		while ((tokens = re.exec(source)))
			this._variables[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
	}

	/**
	 *
	 * @returns {string}
	 */
	public toString(): string {
		return '';
	}

	/**
	 *
	 * @returns {Object}
	 */
	public get variables(): Object {
		return this._variables;
	}

	/**
	 *
	 * @returns {Object}
	 */
	public get formData(): FormData {
		const fd: FormData = new FormData();

		for (const s in this._variables)
			fd.append(s, this._variables[s]);

		return fd;
	}

	/**
	 *
	 * @returns {Object}
	 */
	public set variables(obj: Object) {
		this._variables = obj;
	}
}