/**
 * 地图查询构造器
 * 提供链式API来构建 /map/search 的查询参数.
 *
 * 根据API要求，不同字段适用不同的查询方法:
 * - **直接等值查询 (无前缀)**: `id`, `name`, `user` 等. 请使用 `.eq()` 或专用方法如 `.user()`.
 * - **带规则查询 (有前缀)**: `size`, `player_count`, `download_count`, `favourite_count`. 请使用 `.equ()`, `.lss()`, `.geq()` 等方法.
 * - **多值查询**: `tags`. 请使用 `.in()` 方法.
 *
 * **用法示例:**
 *   const params = new MapQuery()
 *     .user('张三')
 *     .leq('download_count', 100)
 *     .like('name', '测试')
 *     .in('tags', ['PVP', '特殊'])
 *     .build();
 */
export default class MapQuery {
    constructor() {
        this.params = {};
    }

    /**
     * 设置 id
     * @param {number} value
     * @returns {MapQuery}
     */
    id(value) {
        return this.eq('id', value);
    }

    /**
     * 设置 name
     * @param {string} value
     * @returns {MapQuery}
     */
    name(value) {
        return this.eq('name', value);
    }

    /**
     * 设置 chinese_name
     * @param {string} value
     * @returns {MapQuery}
     */
    chineseName(value) {
        return this.eq('chinese_name', value);
    }

    /**
     * 设置 user
     * @param {string} value
     * @returns {MapQuery}
     */
    user(value) {
        return this.eq('user', value);
    }

    /**
     * 设置 create_time
     * @param {string} value
     * @returns {MapQuery}
     */
    createTime(value) {
        return this.eq('create_time', value);
    }

    /**
     * 设置 author
     * @param {string} value
     * @returns {MapQuery}
     */
    author(value) {
        return this.eq('author', value);
    }

    /**
     * 设置 img_file
     * @param {string} value
     * @returns {MapQuery}
     */
    imgFile(value) {
        return this.eq('img_file', value);
    }

    /**
     * 设置 thumbnail
     * @param {string} value
     * @returns {MapQuery}
     */
    thumbnail(value) {
        return this.eq('thumbnail', value);
    }

    /**
     * 设置 zip_file
     * @param {string} value
     * @returns {MapQuery}
     */
    zipFile(value) {
        return this.eq('zip_file', value);
    }

    /**
     * 设置 file_name
     * @param {string} value
     * @returns {MapQuery}
     */
    fileName(value) {
        return this.eq('file_name', value);
    }

    /**
     * 设置 verify_status
     * @param {string} value
     * @returns {MapQuery}
     */
    verifyStatus(value) {
        return this.eq('verify_status', value);
    }

    /**
     * 等于 (e.g., `user='张三'`)
     * @param {string} key - 参数名
     * @param {string|number} value - 参数值
     * @returns {MapQuery}
     */
    eq(key, value) {
        this.params[key] = value;
        return this;
    }
    /**
     * 等于 (带EQU前缀, e.g., `player_count='EQU4'`)
     * @param {string} key - 参数名
     * @param {string|number} value - 参数值
     * @returns {MapQuery}
     */
    equ(key, value) {
        this.params[key] = `EQU${value}`;
        return this;
    }
    /**
     * 不等于 (e.g., `download_count='NEQ100'`)
     * @param {string} key - 参数名
     * @param {string|number} value - 参数值
     * @returns {MapQuery}
     */
    neq(key, value) {
        this.params[key] = `NEQ${value}`;
        return this;
    }
    /**
     * 小于 (Less Than)
     * @param {string} key - 参数名
     * @param {number} value - 参数值
     * @returns {MapQuery}
     */
    lss(key, value) {
        this.params[key] = `LSS${value}`;
        return this;
    }
    /**
     * 小于等于 (Less Than or Equal)
     * @param {string} key - 参数名
     * @param {number} value - 参数值
     * @returns {MapQuery}
     */
    leq(key, value) {
        this.params[key] = `LEQ${value}`;
        return this;
    }
    /**
     * 大于 (Greater Than)
     * @param {string} key - 参数名
     * @param {number} value - 参数值
     * @returns {MapQuery}
     */
    gtr(key, value) {
        this.params[key] = `GTR${value}`;
        return this;
    }
    /**
     * 大于等于 (Greater Than or Equal)
     * @param {string} key - 参数名
     * @param {number} value - 参数值
     * @returns {MapQuery}
     */
    geq(key, value) {
        this.params[key] = `GEQ${value}`;
        return this;
    }
    /**
     * 模糊匹配
     * @param {string} key - 参数名
     * @param {string} value - 参数值
     * @returns {MapQuery}
     */
    like(key, value) {
        this.params[key] = `LIKE${value}`;
        return this;
    }
    /**
     * 包含于 (用于 tags)
     * @param {string} key - 参数名
     * @param {Array<string>} arr - 参数值数组
     * @returns {MapQuery}
     */
    in(key, arr) {
        if (Array.isArray(arr)) {
            this.params[key] = arr.join(',');
        }
        return this;
    }
    /**
     * 构建最终的参数对象
     * @returns {Object}
     */
    build() {
        return { ...this.params };
    }
} 