import { defHttp } from '/@/utils/http/axios';

enum Api {
    list = '/tradesparq/cds_v2/old_api/record',
    listCompanies = '/tradesparq/cds_v2/old_api/company/info',
    destCountry = '/tradesparq/cds_v2/old_api/report/dest_country',//
    trend = '/tradesparq/cds_v2/old_api/trend',//月度趋势
    hsCode = '/tradesparq/cds_v2/old_api/report/hs_code', // HS编码分析接口
    origCountry = '/tradesparq/cds_v2/old_api/report/orig_country', // 原产地分析接口
    supplierReport = '/tradesparq/cds_v2/old_api/report/supplier_report', // 新增供应商报告接口
    buyerReport = '/tradesparq/cds_v2/old_api/report/buyer_report', // 采购商分析接口
    origPort = '/tradesparq/cds_v2/old_api/report/orig_port', // 起运港分析
    destPort = '/tradesparq/cds_v2/old_api/report/dest_port', // 目的港分析
    transType = '/tradesparq/cds_v2/old_api/report/trans_type', // 新增交易类型分析接口
    incoterms = '/tradesparq/cds_v2/old_api/report/incoterms',  // 添加新的 API 路径
    companyInfo = '/tradesparq/cds_v2/old_api/company/info', //企业基本信息
    monthly = '/tradesparq/cds_v2/old_api/company/monthly', // 月度接口
    companyHsCode = '/tradesparq/cds_v2/old_api/company/hscode', // 企业HS编码数据
    companyPartner = '/tradesparq/cds_v2/old_api/company/partner', // 企业贸易伙伴数据
    regionDistribution = '/tradesparq/cds_v2/old_api/company/region', // 企业区域分布数据
    companyRecord = '/tradesparq/cds_v2/old_api/company/record', // 企业详单数据
}

// 定义请求参数类型
export interface TradeRecordQueryParams {
    source_type?: number; // 数据源类型，1：2018年到至今数据，2：历史数据
    data_source?: string[]; // 数据源数组
    date?: number[]; // 时间范围，用两个元素的数组表示，元素为8位数字
    prod_desc?: string; // 产品关键词
    hs_code?: string; // HS编码2-10位
    supplier_t?: string; // 供应商名称
    supplier_addr?: string; // 供应商地址
    supplier_ex_nvl?: boolean; // 排除NVL供应商名称
    supplier_ex_log?: boolean; // 排除物流供应商名称
    buyer_t?: string; // 采购商名称
    buyer_addr?: string; // 采购商地址
    buyer_ex_nvl?: boolean; // 排除NVL采购商名称
    buyer_ex_log?: boolean; // 排除物流采购商名称
    quantity?: string[]; // 数量范围数组
    weight?: string[]; // 重量范围数组
    amount?: string[]; // 金额范围数组
    teu?: string[]; // TEU范围数组
    master_bill_no?: string; // 主单号（模糊匹配）
    sub_bill_no?: string; // 分单号（模糊匹配）
    container_no?: string[]; // 集装箱号（模糊匹配）
    carrier_name?: string; // 承运人（模糊匹配）
    vessel_name?: string; // 船名（模糊匹配）
    brand?: string; // 商标
    others?: string; // 其他信息
    log_shipper?: string; // 物流发货人
    log_consignee?: string; // 物流收货人
    f_orig_country?: string[]; // 筛选，原产地包含数组
    f_orig_country_ex?: string[]; // 筛选，原产地不包含数组
    f_orig_port?: string[]; // 筛选，起运港ID包含数组
    f_orig_port_ex?: string[]; // 筛选，起运港ID不包含数组
    f_dest_country?: string[]; // 筛选，目的地包含数组
    f_dest_country_ex?: string[]; // 筛选，目的地不包含数组
    f_dest_port?: string[]; // 筛选，目的港ID包含数组
    f_dest_port_ex?: string[]; // 筛选，目的港ID不包含数组
    orig_country_code?: string[]; // 原产地编码数组
    orig_port_t?: string; // 起运港
    dest_country_code?: string[]; // 目的地编码数组
    dest_port_t?: string; // 目的港
    [key: string]: any; // 允许其他义的参数
}

// 定义响应数据类型
export interface TradeRecordResponse {
    total: number;
    records: Array<{
        id: string;
        date: string;
        weight: number;
        [key: string]: any;
    }>;
}

// 定义目的国请求参数类型
export interface DestCountryParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义目的国响应数据类型
export interface DestCountryResponse {
    status_code: number;
    data: {
        result: {
            buckets: Array<{
                val: string;           // 国家英文名
                code: string;          // 国家代码
                val_cn: string;        // 国家中文名
                num_buyer: string;      // 采购商数量
                sum_amount: string;     // 总金额
                sum_weight: string;     // 总重量
                count: string;          // 交易次数
            }>;
            numBuckets: number;        // 总bucket数量
        };
    };
}

// 定义趋势请求参数类型
export interface TrendParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义趋势响应数据类型
export interface TrendResponse {
    status_code: number;
    data: {
        result: Array<{
            val: string;           // 月份信息
            num_supplier: number;  // 供应商数量
            num_buyer: number;     // 采购商数量
            sum_amount: number;    // 金额
            sum_weight: number;    // 重量
            count: number;        // 交易次数
        }>;
    };
}

// 定义HS编码分析请求参数类型
export interface HsCodeParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义HS编码分析响应数据类型
export interface HsCodeResponse {
    status_code: number;
    data: {
        result: {
            buckets: Array<{
                val: string;           // HS编码
                sum_amount: string;    // 总金额
                sum_weight: string;    // 总重量
                count: string;         // 交易次数
            }>;
            numBuckets: number;       // 总bucket数量
        };
    };
}

// 定义原产地请求参数类型
export interface OrigCountryParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义原产地响应数据类型
export interface OrigCountryResponse {
    status_code: number;
    data: {
        result: {
            buckets: Array<{
                val: string;           // 国家英文名
                code: string;          // 国家代码
                val_cn: string;        // 国家中文名
                num_supplier: string;   // 供应商数量
                sum_amount: string;     // 总金额
                sum_weight: string;     // 总重量
                count: string;          // 交易次数
            }>;
            numBuckets: number;        // 总bucket数量
        };
    };
}

// 定义供应商报告响应数据类型
export interface SupplierReportResponse {
    status_code: number;
    data: {
        result: {
            buckets: Array<{
                val: string;           // 供应商名称
                fk: string;            // 供应商唯一标识
                num_buyer: string;     // 采购商数量
                sum_amount: string;    // 总金额
                sum_weight: string;    // 总重量
                count: string;         // 交易次数
            }>;
            numBuckets: number;        // 总bucket数量
        };
    };
}

// 定义采购商分析请求参数类型
export interface BuyerReportParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义采购商分析响应数据类型
export interface BuyerReportResponse {
    status_code: number;
    data: {
        result: Array<{
            val: string;           // 采购商名称
            num_supplier: string;  // 供应商数量
            sum_amount: string;    // 总金额
            sum_weight: string;    // 总重量
            count: string;         // 交易次数
        }>;
        numBuckets: number;        // 总bucket数量
    };
}

// 定义原产地港口请求参数类型
export interface OrigPortParams {
    source_type?: number;
    data_source?: string[];
    date?: number[];
    hs_code?: string;
    supplier_t?: string;
    buyer_t?: string;
    [key: string]: any;
}

// 定义原产地港口响应数据类型
export interface OrigPortResponse {
    status_code: number;
    data: {
        result: {
            buckets: Array<{
                val: string;           // 港口名称
                code: string;          // 港口代码
                num_supplier: string;  // 供应商数量
                sum_amount: string;    // 总金额
                sum_weight: string;    // 总重量
                count: string;         // 交易次数
            }>;
            numBuckets: number;        // 总bucket数量
        };
    };
}

/**
 * 获取交易详单列表及总数
 */
export const list = async (params: TradeRecordQueryParams) => {

    return defHttp.post<TradeRecordResponse>(
        {
            url: Api.list, params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

export const listCompanies = (params) => {
    return defHttp.post({ url: Api.listCompanies, params });
};

/**
 * 获取目的国统计数据
 */
export const getDestCountryReport = (params: DestCountryParams) => {
    return defHttp.post<DestCountryResponse>(
        {
            url: Api.destCountry,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取趋势统计数据
 */
export const getTrendReport = (params: TrendParams) => {
    return defHttp.post<TrendResponse>(
        {
            url: Api.trend,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取HS编码分析统计数据
 */
export const getHsCodeReport = (params: HsCodeParams) => {
    return defHttp.post<HsCodeResponse>(
        {
            url: Api.hsCode,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取原产地统计数据
 */
export const getOrigCountryReport = (params: OrigCountryParams) => {
    return defHttp.post<OrigCountryResponse>(
        {
            url: Api.origCountry,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取供应商报告统计数据
 */
export const getSupplierReport = async (params: DestCountryParams) => {
    return defHttp.post<SupplierReportResponse>(
        {
            url: Api.supplierReport,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取采购商分析统计数据
 */
export const getBuyerReport = (params: BuyerReportParams) => {
    return defHttp.post<BuyerReportResponse>(
        {
            url: Api.buyerReport,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取原产地港口统计数据
 */
export const getOrigPortReport = (params: OrigPortParams) => {
    return defHttp.post<OrigPortResponse>(
        {
            url: Api.origPort,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取目的港统计数据
 */
export const getDestPortReport = (params: OrigPortParams) => {
    return defHttp.post(
        {
            url: Api.destPort,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取交易类型统计数据
 */
export const getTransTypeReport = (params: any) => {  // 根据需要定义参数类型
    return defHttp.post<any>(  // 根据需要定义响应类型
        {
            url: Api.transType,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取成交方式统计数据
 */
export const getIncotermsReport = (params: any) => {  // 根据需要定义参数类型
    return defHttp.post<any>(  // 根据需要定义响应类型
        {
            url: Api.incoterms,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    );
};

/**
 * 获取企业基本信息数据
 */
export const getCompanyInfo = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.companyInfo,
            params
        },
        {
            errorMessageMode: 'message',
            isTransformResponse: false,
        }
    )
}

/**
 * 获取企业月度趋势分析数据
 */
export const getMonthly = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.monthly,
            params
        },
        {
            errorMessageMode:'message',
            isTransformResponse: false,
        }
    )
}

/**
 * 获取企业HS编码数据
 */
export const getCompanyHsCode = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.companyHsCode,
            params
        }
    )
}

/**
 * 获取企业贸易伙伴数据
 */
export const getCompanyPartner = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.companyPartner,
            params
        }
    )
}

/**
 * 获取企业区域分布数据
 */
export const getRegionDistribution = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.regionDistribution,
            params
        }
    )
}

/**
 * 获取企业详单数据
 */
export const getCompanyRecord = (params: any) => {
    return defHttp.post<any>(
        {
            url: Api.companyRecord,
            params
        }
    )
}

