import { filter, get, map, reverse } from 'lodash';
import qs from 'query-string';
import { Message } from 'tim-js-sdk';
import { RATING_SEND_RULE } from '../constants/im';

export function getQuery() {
    // console.log(window.location);
    // return qs.parse(window.location.hash.split('?')[1]);
    console.log(window.location);
    return qs.parse(window.location.search.split('?')[1]);
}

export function isTestEnv() {
    return process.env.NODE_ENV === 'development' || process.env.REACT_APP_NODE_ENV === 'test';
}

export function isPreEnv() {
    return process.env.REACT_APP_NODE_ENV === 'pre';
}

export function getCustomMessageData(message: Message) {
    let data = get(message, 'payload.data', {});
    try {
        if (typeof data === 'string') {
            data = JSON.parse(data);
        }
    } catch (e) {
        data = {};
    }
    return data;
}

interface ratingTemplate {
    errorCode: string,
    menuContent: string
    menuId: string
    menuName: string
    menuSendRuleFlag: string
    msg: string
    nonce: string
    requestId: string
}

export function parseRatingTemplate(ratingTemplate: ratingTemplate) {
    return {
        ...JSON.parse(ratingTemplate.menuContent),
        allowClientSendRating: parseInt(ratingTemplate.menuSendRuleFlag) === 4
    }
}

export function dynamicLoadCaptcha() {
    return new Promise((resolve, reject) => {
        const captcha = document.getElementById('TCaptcha');
        if (!captcha) {
            const script = document.createElement('script');
            script.src = 'https://ssl.captcha.qq.com/TCaptcha.js';
            script.id = 'TCaptcha';
            script.addEventListener('load', resolve);
            script.addEventListener('error', reject);
            document.body.appendChild(script);
        } else {
            resolve(undefined);
        }
    });
}

export function verify(appId: any) {
    return dynamicLoadCaptcha()
        .then(
            () =>
                new Promise((resolve, reject) => {
                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                    // @ts-ignore
                    new TencentCaptcha(appId, (res: any) => {
                        switch (res.ret) {
                            case 0:
                                resolve(res);
                                return;
                            case 2:
                                resolve(undefined);
                                return;
                            default:
                                reject(`verify failed, ret: ${JSON.stringify(res)}`);
                                return;
                        }
                    }, { loading: false }).show();
                }),
        )
        .catch((error) => {
            console.error('captcha', error);
            if (error instanceof Error) {
                return generateFallbackCaptchaResult(appId, 1005, error.message);
            }
            if (error?.target?.id === 'TCaptcha') {
                return generateFallbackCaptchaResult(appId, 1001, 'jsload_error');
            }
            return generateFallbackCaptchaResult(appId, 1005, error?.toString() || 'unknown_error');
        });
}

export function generateFallbackCaptchaResult(appId: string, errorCode: number, errorMessage: string) {
    return {
        ret: 0,
        appid: appId,
        randstr: `@${Math.random().toString(36).substr(2)}`,
        ticket: `terror_1001_${appId}_${Math.floor(new Date().getTime() / 1000)}`,
        errorCode,
        errorMessage,
    };
}