{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Statistics.js\",\n  _s = $RefreshSig$();\nimport React, { useState, useEffect, useContext } from \"react\";\nimport { AuthContext } from \"../contexts/AuthContext\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function Statistics() {\n  _s();\n  const [fcmToken, setFcmToken] = useState(\"\");\n  const [fcmMsg, setFcmMsg] = useState(\"\");\n  const [fcmResult, setFcmResult] = useState(\"\");\n  const [fcmLoading, setFcmLoading] = useState(false);\n  const handleSendFCM = async () => {\n    if (!user || !user.token) {\n      setFcmResult(\"로그인 후 이용하세요.\");\n      return;\n    }\n    if (!fcmToken) {\n      setFcmResult(\"FCM 토큰을 입력하세요.\");\n      return;\n    }\n    setFcmLoading(true);\n    setFcmResult(\"\");\n    try {\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Authorization\": `Bearer ${user.token}`\n        },\n        body: JSON.stringify({\n          token: fcmToken,\n          title: \"테스트 알림\",\n          body: fcmMsg || \"테스트 메시지입니다.\"\n        })\n      });\n      const data = await res.json();\n      if (data.success) setFcmResult(\"성공: \" + data.response);else setFcmResult(\"실패: \" + (data.error || \"\"));\n    } catch (e) {\n      setFcmResult(\"네트워크 에러: \" + e.toString());\n    }\n    setFcmLoading(false);\n  };\n  if (!user) return /*#__PURE__*/_jsxDEV(\"div\", {\n    children: \"\\uB85C\\uADF8\\uC778 \\uD544\\uC694\"\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 43,\n    columnNumber: 21\n  }, this);\n  return /*#__PURE__*/_jsxDEV(\"section\", {\n    children: [/*#__PURE__*/_jsxDEV(\"header\", {\n      className: \"main\",\n      children: /*#__PURE__*/_jsxDEV(\"h1\", {\n        children: \"Statistics\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 48,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 47,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        margin: \"32px 0 0 0\",\n        padding: 20,\n        border: \"1px solid #ddd\",\n        borderRadius: 10,\n        maxWidth: 480,\n        background: \"#fafbfc\"\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n        children: \"FCM \\uD14C\\uC2A4\\uD2B8\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 60,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: fcmToken,\n        onChange: e => setFcmToken(e.target.value),\n        placeholder: \"FCM \\uD1A0\\uD070 \\uC785\\uB825\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 61,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: fcmMsg,\n        onChange: e => setFcmMsg(e.target.value),\n        placeholder: \"\\uBA54\\uC2DC\\uC9C0 \\uB0B4\\uC6A9 \\uC785\\uB825 (\\uC0DD\\uB7B5 \\uAC00\\uB2A5)\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 68,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n        onClick: handleSendFCM,\n        disabled: fcmLoading,\n        children: fcmLoading ? \"전송 중...\" : \"FCM 보내기\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 75,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginTop: 10,\n          color: fcmResult.startsWith(\"성공\") ? \"#0b8\" : \"crimson\"\n        },\n        children: fcmResult\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 78,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 52,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 46,\n    columnNumber: 5\n  }, this);\n}\n_s(Statistics, \"coWllHPt7BArBARDU3D64UMIuu8=\");\n_c = Statistics;\nvar _c;\n$RefreshReg$(_c, \"Statistics\");","map":{"version":3,"names":["React","useState","useEffect","useContext","AuthContext","jsxDEV","_jsxDEV","Statistics","_s","fcmToken","setFcmToken","fcmMsg","setFcmMsg","fcmResult","setFcmResult","fcmLoading","setFcmLoading","handleSendFCM","user","token","res","fetch","method","headers","body","JSON","stringify","title","data","json","success","response","error","e","toString","children","fileName","_jsxFileName","lineNumber","columnNumber","className","style","margin","padding","border","borderRadius","maxWidth","background","width","marginBottom","type","value","onChange","target","placeholder","onClick","disabled","marginTop","color","startsWith","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/pages/Statistics.js"],"sourcesContent":["import React, { useState, useEffect, useContext } from \"react\";\r\nimport { AuthContext } from \"../contexts/AuthContext\";\r\n\r\nexport default function Statistics() {\r\n  const [fcmToken, setFcmToken] = useState(\"\");\r\n  const [fcmMsg, setFcmMsg] = useState(\"\");\r\n  const [fcmResult, setFcmResult] = useState(\"\");\r\n  const [fcmLoading, setFcmLoading] = useState(false);\r\n\r\n  const handleSendFCM = async () => {\r\n    if (!user || !user.token) {\r\n      setFcmResult(\"로그인 후 이용하세요.\");\r\n      return;\r\n    }\r\n    if (!fcmToken) {\r\n      setFcmResult(\"FCM 토큰을 입력하세요.\");\r\n      return;\r\n    }\r\n    setFcmLoading(true);\r\n    setFcmResult(\"\");\r\n    try {\r\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          \"Authorization\": `Bearer ${user.token}`,\r\n        },\r\n        body: JSON.stringify({\r\n          token: fcmToken,\r\n          title: \"테스트 알림\",\r\n          body: fcmMsg || \"테스트 메시지입니다.\",\r\n        }),\r\n      });\r\n      const data = await res.json();\r\n      if (data.success) setFcmResult(\"성공: \" + data.response);\r\n      else setFcmResult(\"실패: \" + (data.error || \"\"));\r\n    } catch (e) {\r\n      setFcmResult(\"네트워크 에러: \" + e.toString());\r\n    }\r\n    setFcmLoading(false);\r\n  };\r\n\r\n  if (!user) return <div>로그인 필요</div>;\r\n\r\n  return (\r\n    <section>\r\n      <header className=\"main\">\r\n        <h1>Statistics</h1>\r\n      </header>\r\n\r\n      {/* 아래가 FCM 테스트용 입력창 */}\r\n      <div style={{\r\n        margin: \"32px 0 0 0\",\r\n        padding: 20,\r\n        border: \"1px solid #ddd\",\r\n        borderRadius: 10,\r\n        maxWidth: 480,\r\n        background: \"#fafbfc\"\r\n      }}>\r\n        <h3>FCM 테스트</h3>\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={fcmToken}\r\n          onChange={e => setFcmToken(e.target.value)}\r\n          placeholder=\"FCM 토큰 입력\"\r\n        />\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={fcmMsg}\r\n          onChange={e => setFcmMsg(e.target.value)}\r\n          placeholder=\"메시지 내용 입력 (생략 가능)\"\r\n        />\r\n        <button onClick={handleSendFCM} disabled={fcmLoading}>\r\n          {fcmLoading ? \"전송 중...\" : \"FCM 보내기\"}\r\n        </button>\r\n        <div style={{ marginTop: 10, color: fcmResult.startsWith(\"성공\") ? \"#0b8\" : \"crimson\" }}>\r\n          {fcmResult}\r\n        </div>\r\n      </div>\r\n    </section>\r\n  );\r\n}\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}