{"ast":null,"code":"var _jsxFileName = \"C:\\\\LDT\\\\DSPM\\\\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 {\n    user\n  } = useContext(AuthContext);\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://61.41.9.88:4000/api/v0/fcmSend\", {\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: 44,\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: 49,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 48,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        margin: 20,\n        padding: 16,\n        border: \"1px solid #eee\",\n        borderRadius: 10,\n        maxWidth: 500,\n        background: \"#fafbfc\"\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n        children: \"FCM \\uD14C\\uC2A4\\uD2B8\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 61,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: /*#__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: 63,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 62,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: /*#__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: 72,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 71,\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: 80,\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: 83,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 53,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 47,\n    columnNumber: 5\n  }, this);\n}\n_s(Statistics, \"RpWhMCKtzWKnfO6RP/pFtldgV1A=\");\n_c = Statistics;\nvar _c;\n$RefreshReg$(_c, \"Statistics\");","map":{"version":3,"names":["React","useState","useEffect","useContext","AuthContext","jsxDEV","_jsxDEV","Statistics","_s","user","fcmToken","setFcmToken","fcmMsg","setFcmMsg","fcmResult","setFcmResult","fcmLoading","setFcmLoading","handleSendFCM","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":["C:/LDT/DSPM/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 { user } = useContext(AuthContext);\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://61.41.9.88:4000/api/v0/fcmSend\", {\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: 20,\r\n        padding: 16,\r\n        border: \"1px solid #eee\",\r\n        borderRadius: 10,\r\n        maxWidth: 500,\r\n        background: \"#fafbfc\"\r\n      }}>\r\n        <h3>FCM 테스트</h3>\r\n        <div>\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        </div>\r\n        <div>\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        </div>\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":[]}