import { PrintObject } from "../models/PrintObject";
import { Boolean } from "./Boolean";
import { Number } from "./Number";
import { List } from "./List";


/**
 * @class gve.String
 * @since gve
 */
export class String extends PrintObject{

    /**
     *  String的构造方法,构造一个新String对象
     * @param param 
    */
    constructor(param?: string){
        super();
        if(param){
            this.geeString = param;
        }
    }

    geeString: string;

    /**
      *  构造String对象
      *  @param {string} string 输入的字符串 
      *  @return String
      *  @tutorial gve.String
      */
    static String(string: string){
        return new String(string);
    }

    /**
     *  连接两个字符串
     *  @param {string} string 输入的待拼接字符串
     *  @return String
     */
    cat(string: string) {
        return new String();
    }

    /**
     *  比较两个字符串
     *  @param {string} string 输入的待比较字符串
     *  @return String
     */
    compareTo(string: string) {
        return new String();
    }

    /**
     *  解码JSON字符串
     *  @return object
     */
    decodeJSON() {
        return new PrintObject();
    }

    /**
      *  编码对象到JSON字符串
      *  @param {any} object 待编码的对象
      *  @return String
      *  @tutorial gve.String
      */
    static encodeJSON(object: any){
        return new String();
    }

    /**
     *  检查两个字符串是否相等
     *  @param {any} target 待检查是否相等的对象
     *  @return String
     */
    eqauls(target: any) {
        return new Boolean();
    }

    /**
     *  返回字符串中给定子串首次出现的位置
     *  @param {string} pattern 需要查找的字符串
     *  @return String
     */
    index(pattern: string) {
        return new Number();
    }

    /**
     *  返回字符串长度
     *  @return Number
     */
    length() {
        return new Number();
    }

    /**
     *  根据正则表达式返回匹配的字符串列表
     *  @param {string} regex 匹配的正则表达式
     *  @param {string} [flags] 可选参数,正则的匹配方式 'g|i|ig'
     *  @return List
     */
    match(regex: string, flags?: string) {
        return new List<any>();
    }

    /**
     *  替换匹配到的字符串
     *  @param {string} regex 匹配的正则表达式
     *  @param {string} replacement 替换匹配到的字符串
     *  @param {string} [flags] 可选参数,正则的匹配方式 'g|i|ig'
     *  @return String
     */
    replace(regex: string, replacement: string, flags?: string) {
        return new String();
    }

    /**
     *  返回字符串中子串最后出现的位置
     *  @param {string} pattern 需要查找的字符串
     *  @return String
     */
    rindex(pattern: string) {
        return new Number();
    }

    /**
     *  是否序列化字符串
     *  @param {boolean} [legacy] 可选参数,是否使用序列化格式
     *  @return String
     */
    serialize(legacy?: boolean) {
        return new String();
    }

    /**
     *  截取字符串
     *  @param {number} start 起始位置
     *  @param {number} [end] 可选参数,结束位置(不包含)
     *  @return String
     */
    slice(start: number, end?: number) {
        return new String();
    }

    /**
     *  根据正则表达式返回匹配的字符串列表
     *  @param {string} regex 匹配的正则表达式
     *  @param {string} [flags]  可选参数,正则的匹配方式 'g|i|ig'
     *  @return List
     */
    split(regex: string, flags?: string) {
        return new List<any>();
    }

    /**
     *  字符串小写
     *  @return String
     */
    toLowerCase() {
        return new String();
    }

    /**
     *  字符串大写
     *  @return String
     */
    toUpperCase() {
        return new String();
    }

    /**
     *  移除字符串中空格
     *  @return String
     */
    trim() {
        return new String();
    }

}