// 管理后台统一页面 - 商品审核 + 纠纷处理
const { useState, useEffect } = React;

function AdminAuditPage() {
  const [activeTab, setActiveTab] = useState(NK.Store.get("adminTab") || "audit");
  const [adminInfo, setAdminInfo] = useState(null);
  const [products, setProducts] = useState([]);
  const [auditPage, setAuditPage] = useState(1);
  const [auditTotal, setAuditTotal] = useState(0);
  const [auditLoading, setAuditLoading] = useState(false);
  const [auditInitLoading, setAuditInitLoading] = useState(true);
  const [actionLoading, setActionLoading] = useState(null);
  const [rejectId, setRejectId] = useState(null);
  const [rejectReason, setRejectReason] = useState("");
  const [auditError, setAuditError] = useState("");
  const [disputes, setDisputes] = useState([]);
  const [dispPage, setDispPage] = useState(1);
  const [dispTotal, setDispTotal] = useState(0);
  const [dispLoading, setDispLoading] = useState(false);
  const [dispInitLoading, setDispInitLoading] = useState(true);
  const [dispError, setDispError] = useState("");
  const [dispActionLoading, setDispActionLoading] = useState(false);
  const [payoutCount, setPayoutCount] = useState(0);
  const [showRecord, setShowRecord] = useState(false);
  const [showReject, setShowReject] = useState(false);
  const [showRefund, setShowRefund] = useState(false);
  const [recordContent, setRecordContent] = useState("");
  const [rejectResult, setRejectResult] = useState("");
  const [refundResult, setRefundResult] = useState("");
  const [activeDispute, setActiveDispute] = useState(null);
  const pageSize = 10;
  const adminToken = NK.Api.Admin.getToken();
  var fmtPrice = function(p) { return "\u00a5" + Number(p || 0).toFixed(2); };
  var fmtTime = function(t) { return t ? new Date(t).toLocaleDateString("zh-CN", { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }) : ""; };
  var fmtFullTime = function(t) { return t ? new Date(t).toLocaleString("zh-CN") : "-"; };

  const mapError = function(res, defaultMsg) {
    if (!res || res.code === undefined) return "无法连接后端服务，请确认服务已启动";
    if (res.code === -999) return "无法连接后端服务，请确认服务已启动";
    if (res.code === -998) return "接口响应格式异常";
    var httpStatus = res._httpStatus || 0;
    if (httpStatus === 401 || res.code === -2) return "管理员登录已过期，请重新登录";
    if (httpStatus === 403) return "没有管理员权限";
    if (httpStatus === 404) return "接口不存在，请检查后端路由";
    if (httpStatus >= 500) return res.message || "服务器异常，请稍后重试";
    return res.message || defaultMsg || "操作失败";
  };

  useEffect(function() {
    if (!adminToken) return;
    try {
      var payload = JSON.parse(atob(adminToken.split('.')[1]));
      setAdminInfo({ username: payload.username || 'admin', role: payload.role || '' });
    } catch(e) { setAdminInfo({ username: 'admin', role: '' }); }
  }, [adminToken]);

  const fetchPending = async function(p, append) {
    var cp = p || 1;
    setAuditLoading(true); setAuditError('');
    try {
      var res = await NK.Api.Admin.pending({ page: cp, pageSize: pageSize });
      if (res && res.code === 0) {
        var list = res.data.list || [];
        setProducts(append ? function(prev) { return prev.concat(list); } : list);
        setAuditTotal(res.data.total || 0);
        setAuditPage(cp);
      } else {
        var msg = mapError(res, '加载失败');
        setAuditError(msg);
        if (res && (res.code === -2 || (res._httpStatus >= 401 && res._httpStatus <= 403))) {
          NK.Api.Admin.clearToken();
          NK.Store.set('adminPage', 'login');
        }
      }
    } catch(e) {
      setAuditError('无法连接后端服务，请确认服务已启动');
    } finally {
      setAuditLoading(false); setAuditInitLoading(false);
    }
  };

  useEffect(function() { fetchPending(1, false); }, []);

  const fetchDisputes = async function(p, append) {
    var cp = p || 1;
    setDispLoading(true); setDispError('');
    try {
      var res = await NK.Api.Admin.disputes({ page: cp, pageSize: pageSize });
      if (res && res.code === 0) {
        var list = res.data.list || [];
        setDisputes(append ? function(prev) { return prev.concat(list); } : list);
        setDispTotal(res.data.total || 0);
        setDispPage(res.data.page || cp);
      } else {
        var msg = mapError(res, '加载失败');
        setDispError(msg);
        if (res && (res.code === -2 || (res._httpStatus >= 401 && res._httpStatus <= 403))) {
          NK.Api.Admin.clearToken();
          NK.Store.set('adminPage', 'login');
        }
      }
    } catch(e) {
      setDispError('无法连接后端服务，请确认服务已启动');
    } finally {
      setDispLoading(false); setDispInitLoading(false);
    }
  };

  const switchTab = function(tab) {
    setActiveTab(tab);
    NK.Store.set('adminTab', tab);
    if (tab === 'disputes' && dispInitLoading) fetchDisputes(1, false);
  };

  const handleApprove = async function(id) {
    setActionLoading(id); setAuditError('');
    try {
      var res = await NK.Api.Admin.approve(id);
      if (res && res.code === 0) {
        setProducts(function(prev) { return prev.filter(function(p) { return p.id !== id; }); });
      } else {
        setAuditError(mapError(res, '操作失败'));
      }
    } catch(e) { setAuditError('网络异常，请重试'); }
    finally { setActionLoading(null); }
  };

  const handleReject = async function() {
    if (!rejectReason.trim()) { setAuditError('请输入拒绝原因'); return; }
    setActionLoading(rejectId); setAuditError('');
    try {
      var res = await NK.Api.Admin.reject(rejectId, { reason: rejectReason.trim() });
      if (res && res.code === 0) {
        setProducts(function(prev) { return prev.filter(function(p) { return p.id !== rejectId; }); });
        setRejectId(null); setRejectReason('');
      } else {
        setAuditError(mapError(res, '操作失败'));
      }
    } catch(e) { setAuditError('网络异常，请重试'); }
    finally { setActionLoading(null); }
  };

  var doDisputeAction = async function(fn, successMsg) {
    setDispActionLoading(true); setDispError('');
    try {
      var res = await fn();
      if (res && res.code === 0) {
        alert(successMsg);
        setShowRecord(false); setShowReject(false); setShowRefund(false);
        setActiveDispute(null);
        fetchDisputes(1, false);
      } else {
        setDispError(mapError(res, '操作失败'));
      }
    } catch(e) { setDispError('网络异常，请重试'); }
    finally { setDispActionLoading(false); }
  };

  const handleLogout = function() {
    NK.Api.Admin.clearToken();
    NK.Store.setAll({ adminPage: 'login', adminTab: 'audit' });
    alert('已退出管理员登录');
  };

  var getCover = function(p) {
    if (p.coverImages && p.coverImages.length > 0) return p.coverImages[0].image_url || p.coverImages[0];
    if (p.images && p.images.length > 0) return p.images[0].image_url || p.images[0];
    return null;
  };


  if (auditInitLoading && activeTab === 'audit') {
    return React.createElement('div', { className: 'detail-page' },
      React.createElement('div', { className: 'back-header' },
        React.createElement('div', { className: 'bbtn', onClick: function() { NK.Store.back('home'); } }, '←'),
        React.createElement('div', { className: 'btitle' }, '管理后台')
      ),
      React.createElement('div', { className: 'page-loading' },
        React.createElement('div', { className: 'spinner' }),
        React.createElement('div', { style: { color: '#999', fontSize: 14 } }, '加载中...')
      )
    );
  }

  return React.createElement('div', { className: 'detail-page', style: { background: '#f5f5f5', paddingBottom: 24 } },
    React.createElement('div', { className: 'admin-top-card' },
      React.createElement('div', { className: 'admin-top-row' },
        React.createElement('div', { className: 'admin-top-left', onClick: function() { NK.Store.back('home'); } },
          React.createElement('span', { style: { fontSize: 18, marginRight: 6 } }, '←'),
          React.createElement('span', { style: { fontSize: 18, fontWeight: 700 } }, '管理后台')
        ),
        React.createElement('div', { className: 'admin-top-right' },
          React.createElement('span', { className: 'admin-top-logout', onClick: handleLogout }, '退出')
        )
      ),
      adminInfo && React.createElement('div', { className: 'admin-info-row' },
        React.createElement('span', { className: 'admin-icon' }, '☢'),
        React.createElement('span', { className: 'admin-name' }, adminInfo.username),
        adminInfo.role && React.createElement('span', { className: 'admin-role' }, adminInfo.role)
      )
    ),
    React.createElement('div', { className: 'admin-tab-bar' },
      React.createElement('div', {
        className: 'admin-tab-item' + (activeTab === 'audit' ? ' active' : ''),
        onClick: function() { switchTab('audit'); }
      }, '商品审核',
        auditTotal > 0 && React.createElement('span', { className: 'admin-tab-badge' }, auditTotal)
      ),
      React.createElement('div', {
        className: 'admin-tab-item' + (activeTab === 'disputes' ? ' active' : ''),
        onClick: function() { switchTab('disputes'); }
      }, '纠纷处理',
        dispTotal > 0 && React.createElement('span', { className: 'admin-tab-badge' }, dispTotal)
      ),
      React.createElement('div', {
        key: 'payouts',
        className: 'admin-tab-item' + (activeTab === 'payouts' ? ' active' : ''),
        onClick: function() { setActiveTab('payouts'); NK.Store.set('adminTab', 'payouts'); }
      }, '放款处理',
        payoutCount > 0 && React.createElement('span', { className: 'admin-tab-badge' }, payoutCount)
      )
    ),
    activeTab === 'audit' && React.createElement('div', null,
      auditError && React.createElement('div', { className: 'admin-error-bar' },
        auditError,
        React.createElement('span', { style: { marginLeft: 8, cursor: 'pointer', color: '#1677ff' }, onClick: function() { setAuditError(''); } }, '关闭')
      ),
      products.length === 0 && !auditLoading
        ? React.createElement('div', { className: 'admin-empty' },
            React.createElement('div', { className: 'admin-empty-icon' }, '📋'),
            React.createElement('div', { className: 'admin-empty-title' }, '没有待审核商品'),
            React.createElement('div', { className: 'admin-empty-sub' }, '所有商品已处理完毕')
          )
        : React.createElement('div', { className: 'product-list', style: { marginTop: 0 } },
            products.map(function(p) {
              var cover = getCover(p);
              var cfg = p.detailConfig;
              var leg = '', mt = '', un = '';
              if (cfg) {
                try {
                  var obj = typeof cfg === 'string' ? JSON.parse(cfg) : cfg;
                  if (obj.legendaryWeapon) {
                    var lw = obj.legendaryWeapon;
                    var parts = [];
                    if (lw.tier5Count) for (var i = 0; i < lw.tier5Count; i++) parts.push('5');
                    if (lw.tier4Count) for (var i2 = 0; i2 < lw.tier4Count; i2++) parts.push('4');
                    leg = parts.join('');
                    if (!leg && (lw.tier5 || lw.tier4)) leg = '已选';
                  }
                  var flyCount = obj.legendaryMount && obj.legendaryMount.flyCount;
                  if (flyCount) mt = flyCount >= 8 ? '八飞' : flyCount >= 6 ? '六飞' : flyCount >= 4 ? '四飞' : '';
                  var zodiacCount = obj.legendaryMount && obj.legendaryMount.zodiacCount;
                  if (mt && zodiacCount) mt = mt + ' · ' + zodiacCount + '星座';
                  var unlock = obj.equipmentUnlock;
                  if (unlock && unlock.t8) {
                    var t8 = unlock.t8;
                    var parts2 = [];
                    Object.keys(t8).forEach(function(k) { if (t8[k] > 0) parts2.push(k + t8[k] + '件'); });
                    if (parts2.length > 0) un = 'T8 ' + parts2.join(' | ');
                  }
                } catch(ee) {}
              }
              var busy = actionLoading === p.id;
              return React.createElement('div', { key: p.id, className: 'admin-product-card' },
                React.createElement('div', { className: 'apc-top' },
                  cover
                    ? React.createElement('img', { className: 'apc-cover', src: cover, alt: p.title, onError: function(e) { e.target.style.display = 'none'; } })
                    : React.createElement('div', { className: 'apc-cover-placeholder' }, '🎮'),
                  React.createElement('div', { className: 'apc-info' },
                    React.createElement('div', { className: 'apc-title' }, p.title || '未命名商品'),
                    React.createElement('div', { className: 'apc-sub' }, (p.account_uid || p.accountUid || '') + (p.server ? ' · ' + p.server : '')),
                    React.createElement('div', { className: 'apc-price' }, fmtPrice(p.price)),
                    (leg || mt || un) && React.createElement('div', { className: 'apc-config' },
                      leg && React.createElement('span', { className: 'apc-digit' }, leg),
                      mt && React.createElement('span', { className: 'apc-tag' }, mt),
                      un && React.createElement('span', { className: 'apc-tag' }, un)
                    ),
                    React.createElement('div', { className: 'apc-time' }, fmtTime(p.create_time))
                  )
                ),
                React.createElement('div', { className: 'apc-actions' },
                  React.createElement('button', {
                    className: 'apc-btn apc-btn-approve',
                    onClick: function() { handleApprove(p.id); },
                    disabled: busy
                  }, busy ? '处理中...' : '✓ 审核通过'),
                  React.createElement('button', {
                    className: 'apc-btn apc-btn-reject',
                    onClick: function() { setRejectId(p.id); setRejectReason(''); setAuditError(''); },
                    disabled: busy
                  }, '✗ 审核拒绝')
                )
              );
            }),
            auditLoading && React.createElement('div', { style: { textAlign: 'center', padding: 16, color: '#999', fontSize: 13 } }, '加载中...'),
            products.length > 0 && products.length < auditTotal && React.createElement('div', { style: { textAlign: 'center', padding: '8px 0 16px' } },
              React.createElement('button', {
                onClick: function() { fetchPending(auditPage + 1, true); },
                disabled: auditLoading, className: 'apc-loadmore'
              }, '加载更多')
            )
          ),
      rejectId !== null && React.createElement('div', { className: 'modal-overlay', onClick: function() { setRejectId(null); } },
        React.createElement('div', { className: 'modal-box', onClick: function(e) { e.stopPropagation(); } },
          React.createElement('div', { className: 'modal-header' },
            React.createElement('div', { className: 'modal-title' }, '审核拒绝')
          ),
          React.createElement('div', { className: 'modal-body' },
            React.createElement('textarea', {
              style: { width: '100%', minHeight: 80, border: '1px solid #e8e8e8', borderRadius: 8, padding: 10, fontSize: 14, outline: 'none', resize: 'vertical', fontFamily: 'inherit' },
              placeholder: '请输入拒绝原因',
              value: rejectReason,
              onChange: function(e) { setRejectReason(e.target.value); }
            })
          ),
          React.createElement('div', { className: 'modal-footer' },
            React.createElement('button', { className: 'btn-cancel', onClick: function() { setRejectId(null); } }, '取消'),
            React.createElement('button', {
              className: 'btn-confirm', onClick: handleReject, disabled: actionLoading !== null,
              style: actionLoading !== null ? { color: '#ccc' } : { background: '#ff4d4f' }
            }, actionLoading !== null ? '处理中...' : '确认拒绝')
          )
        )
      )
    ),
    activeTab === 'disputes' && React.createElement('div', null,
      dispError && React.createElement('div', { className: 'admin-error-bar' },
        dispError,
        React.createElement('span', { style: { marginLeft: 8, cursor: 'pointer', color: '#1677ff' }, onClick: function() { setDispError(''); } }, '关闭')
      ),
      dispInitLoading
        ? React.createElement('div', { className: 'page-loading' },
            React.createElement('div', { className: 'spinner' }),
            React.createElement('div', { style: { color: '#999', fontSize: 14 } }, '加载中...')
          )
        : disputes.length === 0 && !dispLoading
          ? React.createElement('div', { className: 'admin-empty' },
              React.createElement('div', { className: 'admin-empty-icon' }, '📭'),
              React.createElement('div', { className: 'admin-empty-title' }, '暂无纠纷'),
              React.createElement('div', { className: 'admin-empty-sub' }, '当前没有需要处理的交易纠纷')
            )
          : React.createElement('div', { className: 'product-list', style: { marginTop: 0 } },
              disputes.map(function(d) {
                var ds = d.status;
                var sl = ds === 0 ? '待处理' : ds === 1 ? '处理中' : ds === 2 ? '已处理' : ds === 3 ? '已关闭' : '未知';
                var ss = ds === 0 ? { color: '#ff4d4f', background: '#fff2f0' } : ds === 1 ? { color: '#fa8c16', background: '#fff7e6' } : ds === 2 ? { color: '#52c41a', background: '#f6ffed' } : { color: '#999', background: '#f5f5f5' };
                var dt = d.dispute_type || d.type || '';
                var tl = dt === 'after_sale' ? '申请售后' : dt === 'feedback' ? '问题反馈' : dt === 'dispute' ? '交易纠纷' : dt === 'inspection_dispute' ? '验号纠纷' : dt || '纠纷';
                return React.createElement('div', { key: d.id, className: 'admin-dispute-card' },
                  React.createElement('div', { className: 'adc-top' },
                    React.createElement('div', { className: 'adc-title' }, d.account_title || d.title || ('订单#' + (d.order_no || d.order_id || d.id))),
                    React.createElement('span', { className: 'adc-status', style: ss }, sl)
                  ),
                  React.createElement('div', { className: 'adc-body' },
                    React.createElement('div', { className: 'adc-row' },
                      React.createElement('span', { className: 'adc-label' }, '类型'),
                      React.createElement('span', { className: 'adc-val' }, tl)
                    ),
                    React.createElement('div', { className: 'adc-row' },
                      React.createElement('span', { className: 'adc-label' }, '原因'),
                      React.createElement('span', { className: 'adc-val' }, d.reason || '-')
                    ),
                    d.order_no && React.createElement('div', { className: 'adc-row' },
                      React.createElement('span', { className: 'adc-label' }, '订单号'),
                      React.createElement('span', { className: 'adc-val' }, d.order_no)
                    ),
                    React.createElement('div', { className: 'adc-row' },
                      React.createElement('span', { className: 'adc-label' }, '提交时间'),
                      React.createElement('span', { className: 'adc-val' }, fmtFullTime(d.create_time))
                    )
                  ),
                  React.createElement('div', { className: 'adc-actions' },
                    React.createElement('button', { className: 'adc-btn adc-btn-detail',
                      onClick: function() { NK.Store.navigate('adminDisputeDetail', { id: d.id }); }
                    }, '查看详情'),
                    ds === 0 && React.createElement('button', { className: 'adc-btn adc-btn-record',
                      onClick: function() { setActiveDispute(d); setShowRecord(true); setRecordContent(''); }
                    }, '添加记录'),
                    ds === 0 && React.createElement('button', { className: 'adc-btn adc-btn-reject',
                      onClick: function() { setActiveDispute(d); setShowReject(true); setRejectResult(''); }
                    }, '驳回纠纷'),
                    ds === 0 && React.createElement('button', { className: 'adc-btn adc-btn-refund',
                      onClick: function() { setActiveDispute(d); setShowRefund(true); setRefundResult(''); }
                    }, '同意退款')
                  )
                );
              }),
              dispLoading && React.createElement('div', { style: { textAlign: 'center', padding: 16, color: '#999', fontSize: 13 } }, '加载中...'),
              disputes.length > 0 && disputes.length < dispTotal && React.createElement('div', { style: { textAlign: 'center', padding: '8px 0 16px' } },
                React.createElement('button', { onClick: function() { fetchDisputes(dispPage + 1, true); },
                  disabled: dispLoading, className: 'apc-loadmore' }, '加载更多')
              )
            ),
      showRecord && React.createElement('div', { className: 'modal-overlay', onClick: function() { setShowRecord(false); } },
        React.createElement('div', { className: 'modal-box', onClick: function(e) { e.stopPropagation(); } },
          React.createElement('div', { className: 'modal-header' },
            React.createElement('div', { className: 'modal-title' }, '添加处理记录')
          ),
          React.createElement('div', { className: 'modal-body' },
            React.createElement('textarea', {
              style: { width: '100%', minHeight: 80, border: '1px solid #e8e8e8', borderRadius: 8, padding: 10, fontSize: 14, outline: 'none', fontFamily: 'inherit' },
              placeholder: '处理说明', value: recordContent,
              onChange: function(e) { setRecordContent(e.target.value); }
            })
          ),
          React.createElement('div', { className: 'modal-footer' },
            React.createElement('button', { className: 'btn-cancel', onClick: function() { setShowRecord(false); } }, '取消'),
            React.createElement('button', { className: 'btn-confirm', disabled: dispActionLoading,
              onClick: function() { doDisputeAction(function() { return NK.Api.Admin.addDisputeRecord(activeDispute.id, { content: recordContent }); }, '记录已添加'); }
            }, dispActionLoading ? '处理中...' : '确认')
          )
        )
      ),
      showReject && React.createElement('div', { className: 'modal-overlay', onClick: function() { setShowReject(false); } },
        React.createElement('div', { className: 'modal-box', onClick: function(e) { e.stopPropagation(); } },
          React.createElement('div', { className: 'modal-header' },
            React.createElement('div', { className: 'modal-title' }, '驳回纠纷')
          ),
          React.createElement('div', { className: 'modal-body' },
            React.createElement('div', { style: { fontSize: 14, color: '#333', marginBottom: 12 } }, '确认驳回该纠纷并恢复验号流程吗？'),
            React.createElement('input', { className: 'pub3-input', placeholder: '处理结果说明', value: rejectResult,
              onChange: function(e) { setRejectResult(e.target.value); } })
          ),
          React.createElement('div', { className: 'modal-footer' },
            React.createElement('button', { className: 'btn-cancel', onClick: function() { setShowReject(false); } }, '取消'),
            React.createElement('button', { className: 'btn-confirm', disabled: dispActionLoading, style: { background: '#fa8c16' },
              onClick: function() { doDisputeAction(function() { return NK.Api.Admin.rejectDispute(activeDispute.id, { result: rejectResult }); }, '已驳回纠纷'); }
            }, dispActionLoading ? '处理中...' : '确认驳回')
          )
        )
      ),
      showRefund && React.createElement('div', { className: 'modal-overlay', onClick: function() { setShowRefund(false); } },
        React.createElement('div', { className: 'modal-box', onClick: function(e) { e.stopPropagation(); } },
          React.createElement('div', { className: 'modal-header' },
            React.createElement('div', { className: 'modal-title' }, '同意退款')
          ),
          React.createElement('div', { className: 'modal-body' },
            React.createElement('div', { style: { fontSize: 14, color: '#333', marginBottom: 12 } }, '确认同意退款吗？退款后订单将结束，款项退回买家。'),
            React.createElement('input', { className: 'pub3-input', placeholder: '退款说明', value: refundResult,
              onChange: function(e) { setRefundResult(e.target.value); } })
          ),
          React.createElement('div', { className: 'modal-footer' },
            React.createElement('button', { className: 'btn-cancel', onClick: function() { setShowRefund(false); } }, '取消'),
            React.createElement('button', { className: 'btn-confirm', disabled: dispActionLoading, style: { background: '#ff4d4f' },
              onClick: function() { doDisputeAction(function() { return NK.Api.Admin.refundDispute(activeDispute.id, { result: refundResult }); }, '退款已完成'); }
            }, dispActionLoading ? '处理中...' : '确认退款')
          )
        )
      )
    )
  );
}

window.NK = window.NK || {};
NK.AdminAuditPage = AdminAuditPage;
