{"ast":null,"code":"import _objectSpread from\"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";import _taggedTemplateLiteral from\"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js\";var _templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,_templateObject6,_templateObject7,_templateObject8,_templateObject9,_templateObject0,_templateObject1,_templateObject10,_templateObject11,_templateObject12,_templateObject13,_templateObject14,_templateObject15,_templateObject16,_templateObject17;// src/components/message/GroupChat.js - ポーリングフォールバック対応版\nimport React,{useState,useEffect,useRef,useCallback,useContext}from'react';import styled from'styled-components';import{GroupChat as GroupChatAPI}from'../../api/api';import{AuthContext}from'../../context/AuthContext';import Button from'../common/Button';import AnonymousNameModal from'./AnonymousNameModal';import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";const Container=styled.div(_templateObject||(_templateObject=_taggedTemplateLiteral([\"\\n  display: flex;\\n  flex-direction: column;\\n  height: 100%;\\n\"])));const ConnectionStatus=styled.div(_templateObject2||(_templateObject2=_taggedTemplateLiteral([\"\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  padding: 8px 16px;\\n  margin-bottom: 16px;\\n  border-radius: var(--border-radius);\\n  font-size: 14px;\\n  background: \",\";\\n  color: \",\";\\n  border: 1px solid \",\";\\n\"])),props=>props.$connected?'#e8f5e8':'#fff3cd',props=>props.$connected?'#155724':'#856404',props=>props.$connected?'#c3e6c3':'#ffeaa7');const StatusIndicator=styled.span(_templateObject3||(_templateObject3=_taggedTemplateLiteral([\"\\n  width: 8px;\\n  height: 8px;\\n  border-radius: 50%;\\n  background: \",\";\\n  margin-right: 8px;\\n\"])),props=>props.$connected?'#28a745':'#ffc107');const MembersBar=styled.div(_templateObject4||(_templateObject4=_taggedTemplateLiteral([\"\\n  display: flex;\\n  align-items: center;\\n  gap: 8px;\\n  padding: 12px;\\n  background: var(--background-color);\\n  border-radius: var(--border-radius);\\n  margin-bottom: 16px;\\n  flex-wrap: wrap;\\n\"])));const MemberBadge=styled.span(_templateObject5||(_templateObject5=_taggedTemplateLiteral([\"\\n  padding: 4px 12px;\\n  background: \",\";\\n  color: \",\";\\n  border: 1px solid \",\";\\n  border-radius: 16px;\\n  font-size: 14px;\\n  cursor: \",\";\\n\\n  &:hover {\\n    background: \",\";\\n  }\\n\"])),props=>props.$isOwner?'var(--primary-color)':'white',props=>props.$isOwner?'white':'var(--text-color)',props=>props.$isOwner?'var(--primary-color)':'var(--border-color)',props=>props.$clickable?'pointer':'default',props=>props.$clickable?'var(--background-color)':'');const MembersLabel=styled.span(_templateObject6||(_templateObject6=_taggedTemplateLiteral([\"\\n  font-weight: bold;\\n  color: var(--text-light);\\n  font-size: 14px;\\n\"])));const MessageList=styled.div(_templateObject7||(_templateObject7=_taggedTemplateLiteral([\"\\n  flex-grow: 1;\\n  overflow-y: auto;\\n  margin-bottom: 16px;\\n  max-height: 400px;\\n  padding-right: 8px;\\n\\n  &::-webkit-scrollbar {\\n    width: 6px;\\n  }\\n\\n  &::-webkit-scrollbar-track {\\n    background: var(--background-color);\\n    border-radius: 4px;\\n  }\\n\\n  &::-webkit-scrollbar-thumb {\\n    background: var(--border-color);\\n    border-radius: 4px;\\n  }\\n\"])));const Message=styled.div(_templateObject8||(_templateObject8=_taggedTemplateLiteral([\"\\n  margin-bottom: 16px;\\n  display: flex;\\n  flex-direction: column;\\n  align-items: \",\";\\n\"])),props=>props.$sent?'flex-end':'flex-start');const MessageBubble=styled.div(_templateObject9||(_templateObject9=_taggedTemplateLiteral([\"\\n  background-color: \",\";\\n  color: \",\";\\n  padding: 12px 16px;\\n  border-radius: 18px;\\n  max-width: 70%;\\n  word-break: break-word;\\n  opacity: \",\";\\n\"])),props=>{if(props.$isOwner&&!props.$sent)return'var(--primary-color)';if(props.$sent)return'#4a9c5d';return'var(--background-color)';},props=>props.$isOwner&&!props.$sent||props.$sent?'white':'var(--text-color)',props=>props.$sending?0.7:1);const MessageInfo=styled.div(_templateObject0||(_templateObject0=_taggedTemplateLiteral([\"\\n  font-size: 12px;\\n  color: var(--text-light);\\n  margin-top: 4px;\\n\"])));const MentionTag=styled.span(_templateObject1||(_templateObject1=_taggedTemplateLiteral([\"\\n  background: rgba(255, 255, 255, 0.2);\\n  padding: 2px 6px;\\n  border-radius: 4px;\\n  margin-right: 4px;\\n  font-size: 12px;\\n\"])));const MessageForm=styled.form(_templateObject10||(_templateObject10=_taggedTemplateLiteral([\"\\n  display: flex;\\n  gap: 12px;\\n  align-items: flex-end;\\n\\n  @media (max-width: 768px) {\\n    flex-direction: column;\\n    gap: 8px;\\n  }\\n\"])));const InputWrapper=styled.div(_templateObject11||(_templateObject11=_taggedTemplateLiteral([\"\\n  flex-grow: 1;\\n  display: flex;\\n  flex-direction: column;\\n  gap: 8px;\\n\"])));const MentionSelect=styled.select(_templateObject12||(_templateObject12=_taggedTemplateLiteral([\"\\n  padding: 8px 12px;\\n  border: 2px solid var(--border-color);\\n  border-radius: var(--border-radius);\\n  font-size: 14px;\\n  background: white;\\n\\n  &:focus {\\n    outline: none;\\n    border-color: var(--primary-color);\\n  }\\n\"])));const MessageInput=styled.textarea(_templateObject13||(_templateObject13=_taggedTemplateLiteral([\"\\n  width: 100%;\\n  padding: 12px 16px;\\n  font-size: 16px;\\n  border: 2px solid var(--border-color);\\n  border-radius: var(--border-radius);\\n  resize: none;\\n  min-height: 60px;\\n\\n  &:focus {\\n    outline: none;\\n    border-color: var(--primary-color);\\n  }\\n\"])));const SendButton=styled(Button)(_templateObject14||(_templateObject14=_taggedTemplateLiteral([\"\\n  height: fit-content;\\n\"])));const NoMessages=styled.p(_templateObject15||(_templateObject15=_taggedTemplateLiteral([\"\\n  text-align: center;\\n  font-size: 16px;\\n  color: var(--text-light);\\n  margin: 48px 0;\\n\"])));const Loading=styled.p(_templateObject16||(_templateObject16=_taggedTemplateLiteral([\"\\n  text-align: center;\\n  font-size: 16px;\\n  color: var(--text-light);\\n  margin: 24px 0;\\n\"])));const ErrorText=styled.p(_templateObject17||(_templateObject17=_taggedTemplateLiteral([\"\\n  text-align: center;\\n  color: var(--error-color);\\n  margin: 24px 0;\\n\"])));// 日付フォーマット関数（Firefox対応）\nconst formatDate=dateString=>{if(!dateString)return'';try{// SQLiteのdatetime形式対応\nconst normalized=dateString.replace(' ','T');const date=new Date(normalized);if(isNaN(date.getTime())){return dateString;}return date.toLocaleString('ja-JP');}catch(e){return dateString;}};const GroupChatComponent=_ref=>{let{jobId,jobOwnerId}=_ref;const{currentUser}=useContext(AuthContext);const[membership,setMembership]=useState(null);const[members,setMembers]=useState([]);const[messages,setMessages]=useState([]);const[newMessage,setNewMessage]=useState('');const[mentionUserId,setMentionUserId]=useState('');const[loading,setLoading]=useState(true);const[error,setError]=useState('');const[showNameModal,setShowNameModal]=useState(false);const[isConnected,setIsConnected]=useState(false);const[isOwner,setIsOwner]=useState(false);const[usePolling,setUsePolling]=useState(false);const messageListRef=useRef(null);const wsRef=useRef(null);const pollingIntervalRef=useRef(null);const reconnectAttempts=useRef(0);const maxReconnectAttempts=3;// メンバーシップ確認\nconst checkMembership=useCallback(async()=>{if(!currentUser)return false;try{const response=await GroupChatAPI.getMembership(jobId,currentUser.id);if(response.data.is_member){setMembership(response.data.membership);setIsOwner(response.data.membership.is_owner===1);return true;}else if(response.data.is_owner){setShowNameModal(true);setIsOwner(true);return false;}else{setShowNameModal(true);return false;}}catch(err){console.error('メンバーシップ確認エラー',err);setError('グループチャットの確認に失敗しました');return false;}},[jobId,currentUser]);// メンバー取得\nconst fetchMembers=useCallback(async()=>{if(!currentUser)return;try{const response=await GroupChatAPI.getMembers(jobId,currentUser.id);setMembers(response.data.members);}catch(err){console.error('メンバー取得エラー',err);}},[jobId,currentUser]);// メッセージ取得\nconst fetchMessages=useCallback(async()=>{if(!currentUser)return;try{const response=await GroupChatAPI.getMessages(jobId,currentUser.id);setMessages(response.data.messages);}catch(err){console.error('メッセージ取得エラー',err);}},[jobId,currentUser]);// ポーリング開始\nconst startPolling=useCallback(()=>{console.log('📡 ポーリングモード開始');setUsePolling(true);if(pollingIntervalRef.current){clearInterval(pollingIntervalRef.current);}pollingIntervalRef.current=setInterval(async()=>{try{await fetchMessages();}catch(err){console.error('ポーリング取得エラー:',err);}},3000);},[fetchMessages]);// ポーリング停止\nconst stopPolling=useCallback(()=>{if(pollingIntervalRef.current){clearInterval(pollingIntervalRef.current);pollingIntervalRef.current=null;}setUsePolling(false);},[]);// WebSocket接続\nconst connectWebSocket=useCallback(()=>{if(!currentUser||!membership)return;// 再接続回数超過でポーリングに切り替え\nif(reconnectAttempts.current>=maxReconnectAttempts){console.log('🔄 WebSocket再接続上限、ポーリングモードに切り替え');startPolling();return;}try{const protocol=window.location.protocol==='https:'?'wss:':'ws:';const host=window.location.host;const wsUrl=\"\".concat(protocol,\"//\").concat(host,\"/nikko/ws\");console.log('WebSocket接続試行中...',wsUrl);const ws=new WebSocket(wsUrl);wsRef.current=ws;ws.onopen=()=>{console.log('✅ グループチャットWebSocket接続成功');setIsConnected(true);stopPolling();reconnectAttempts.current=0;ws.send(JSON.stringify({type:'join_group_room',job_posting_id:jobId,user_id:currentUser.id,is_owner:isOwner}));};ws.onmessage=event=>{try{const data=JSON.parse(event.data);switch(data.type){case'group_room_joined':console.log('✅ グループルーム参加確認');break;case'group_message_sent':setMessages(prev=>prev.map(msg=>msg.tempId===data.tempId?_objectSpread(_objectSpread({},msg),{},{id:data.message.id,sending:false}):msg));break;case'new_group_message':setMessages(prev=>{const exists=prev.some(msg=>msg.id===data.message.id);if(exists)return prev;return[...prev,data.message];});break;case'group_message_error':setError('メッセージの送信に失敗しました');break;default:break;}}catch(err){console.error('WebSocketメッセージ解析エラー',err);}};ws.onclose=()=>{console.log('🔌 グループチャットWebSocket切断');setIsConnected(false);reconnectAttempts.current+=1;if(reconnectAttempts.current<maxReconnectAttempts){setTimeout(()=>{if(membership)connectWebSocket();},5000);}else{console.log('🔄 再接続上限、ポーリングモードに切り替え');startPolling();}};ws.onerror=error=>{console.error('WebSocketエラー',error);setIsConnected(false);};}catch(err){console.error('❌ WebSocket接続失敗:',err);setIsConnected(false);startPolling();}},[currentUser,membership,jobId,isOwner,startPolling,stopPolling]);// 初期化\nuseEffect(()=>{const initialize=async()=>{setLoading(true);const isMember=await checkMembership();if(isMember){await fetchMembers();await fetchMessages();}setLoading(false);};initialize();},[checkMembership,fetchMembers,fetchMessages]);// WebSocket接続開始\nuseEffect(()=>{if(membership&&!loading){connectWebSocket();}return()=>{if(wsRef.current){wsRef.current.close();}stopPolling();};},[membership,loading,connectWebSocket,stopPolling]);// 自動スクロール\nuseEffect(()=>{if(messageListRef.current){messageListRef.current.scrollTop=messageListRef.current.scrollHeight;}},[messages]);// 参加完了ハンドラ\nconst handleJoinComplete=async anonymousName=>{setShowNameModal(false);setMembership({anonymous_name:anonymousName,is_owner:isOwner?1:0});await fetchMembers();await fetchMessages();};// メッセージ送信\nconst handleSubmit=async e=>{e.preventDefault();if(!newMessage.trim()||!membership)return;const messageContent=newMessage.trim();const tempId=Date.now();const optimisticMessage={id:tempId,tempId:tempId,message:messageContent,sender_id:currentUser.id,sender_name:membership.anonymous_name,sender_is_owner:isOwner?1:0,mentioned_user_id:mentionUserId||null,created_at:new Date().toISOString(),sending:true};setMessages(prev=>[...prev,optimisticMessage]);setNewMessage('');setMentionUserId('');try{var _wsRef$current;if(isConnected&&((_wsRef$current=wsRef.current)===null||_wsRef$current===void 0?void 0:_wsRef$current.readyState)===WebSocket.OPEN){wsRef.current.send(JSON.stringify({type:'group_message',job_posting_id:jobId,sender_id:currentUser.id,content:messageContent,mentioned_user_id:mentionUserId||null,tempId:tempId}));}else{// HTTP APIフォールバック\nawait GroupChatAPI.sendMessage(jobId,{sender_id:currentUser.id,message:messageContent,mentioned_user_id:mentionUserId||null});// 送信完了を反映\nsetMessages(prev=>prev.map(msg=>msg.tempId===tempId?_objectSpread(_objectSpread({},msg),{},{sending:false}):msg));// 最新メッセージを取得\nawait fetchMessages();}}catch(err){console.error('メッセージ送信エラー',err);setMessages(prev=>prev.filter(msg=>msg.tempId!==tempId));setNewMessage(messageContent);setError('メッセージの送信に失敗しました');}};// ニックネーム選択モーダル\nif(showNameModal){return/*#__PURE__*/_jsx(AnonymousNameModal,{jobId:jobId,userId:currentUser===null||currentUser===void 0?void 0:currentUser.id,onJoin:handleJoinComplete,onCancel:()=>setShowNameModal(false)});}if(loading){return/*#__PURE__*/_jsx(Loading,{children:\"\\u8AAD\\u307F\\u8FBC\\u307F\\u4E2D...\"});}if(error&&!membership){return/*#__PURE__*/_jsx(ErrorText,{children:error});}if(!membership){return/*#__PURE__*/_jsx(Loading,{children:\"\\u30B0\\u30EB\\u30FC\\u30D7\\u30C1\\u30E3\\u30C3\\u30C8\\u306B\\u53C2\\u52A0\\u3057\\u3066\\u304F\\u3060\\u3055\\u3044\"});}return/*#__PURE__*/_jsxs(Container,{children:[/*#__PURE__*/_jsxs(ConnectionStatus,{$connected:isConnected,children:[/*#__PURE__*/_jsx(StatusIndicator,{$connected:isConnected}),isConnected?'リアルタイム接続中':usePolling?'オフラインモード（自動更新中）':'接続中...']}),/*#__PURE__*/_jsxs(MembersBar,{children:[/*#__PURE__*/_jsx(MembersLabel,{children:\"\\u53C2\\u52A0\\u8005:\"}),members.map(member=>/*#__PURE__*/_jsxs(MemberBadge,{$isOwner:member.is_owner===1,$clickable:isOwner&&member.is_owner!==1,onClick:()=>{if(isOwner&&member.is_owner!==1){setMentionUserId(member.user_id.toString());}},children:[member.anonymous_name,member.is_owner===1&&' (求人主)']},member.id))]}),/*#__PURE__*/_jsx(MessageList,{ref:messageListRef,children:messages.length===0?/*#__PURE__*/_jsx(NoMessages,{children:\"\\u30E1\\u30C3\\u30BB\\u30FC\\u30B8\\u306F\\u307E\\u3060\\u3042\\u308A\\u307E\\u305B\\u3093\"}):messages.map(msg=>{var _members$find;return/*#__PURE__*/_jsxs(Message,{$sent:msg.sender_id===currentUser.id,children:[/*#__PURE__*/_jsxs(MessageBubble,{$sent:msg.sender_id===currentUser.id,$isOwner:msg.sender_is_owner===1,$sending:msg.sending,children:[msg.mentioned_user_id&&/*#__PURE__*/_jsxs(MentionTag,{children:[\"@\",((_members$find=members.find(m=>m.user_id===msg.mentioned_user_id))===null||_members$find===void 0?void 0:_members$find.anonymous_name)||'---']}),msg.message]}),/*#__PURE__*/_jsxs(MessageInfo,{children:[msg.sender_name,msg.sender_is_owner===1&&' (求人主)',' • ',formatDate(msg.created_at),msg.sending&&' • 送信中...']})]},msg.id||msg.tempId);})}),/*#__PURE__*/_jsxs(MessageForm,{onSubmit:handleSubmit,children:[/*#__PURE__*/_jsxs(InputWrapper,{children:[isOwner&&members.length>1&&/*#__PURE__*/_jsxs(MentionSelect,{value:mentionUserId,onChange:e=>setMentionUserId(e.target.value),children:[/*#__PURE__*/_jsx(\"option\",{value:\"\",children:\"\\u5168\\u54E1\\u306B\\u9001\\u4FE1\"}),members.filter(m=>m.is_owner!==1).map(m=>/*#__PURE__*/_jsxs(\"option\",{value:m.user_id,children:[\"@\",m.anonymous_name,\" \\u306B\\u9001\\u4FE1\"]},m.user_id))]}),/*#__PURE__*/_jsx(MessageInput,{value:newMessage,onChange:e=>setNewMessage(e.target.value),placeholder:\"\\u30E1\\u30C3\\u30BB\\u30FC\\u30B8\\u3092\\u5165\\u529B...\"})]}),/*#__PURE__*/_jsx(SendButton,{type:\"submit\",disabled:!newMessage.trim(),children:\"\\u9001\\u4FE1\"})]})]});};export default GroupChatComponent;","map":{"version":3,"names":["React","useState","useEffect","useRef","useCallback","useContext","styled","GroupChat","GroupChatAPI","AuthContext","Button","AnonymousNameModal","jsx","_jsx","jsxs","_jsxs","Container","div","_templateObject","_taggedTemplateLiteral","ConnectionStatus","_templateObject2","props","$connected","StatusIndicator","span","_templateObject3","MembersBar","_templateObject4","MemberBadge","_templateObject5","$isOwner","$clickable","MembersLabel","_templateObject6","MessageList","_templateObject7","Message","_templateObject8","$sent","MessageBubble","_templateObject9","$sending","MessageInfo","_templateObject0","MentionTag","_templateObject1","MessageForm","form","_templateObject10","InputWrapper","_templateObject11","MentionSelect","select","_templateObject12","MessageInput","textarea","_templateObject13","SendButton","_templateObject14","NoMessages","p","_templateObject15","Loading","_templateObject16","ErrorText","_templateObject17","formatDate","dateString","normalized","replace","date","Date","isNaN","getTime","toLocaleString","e","GroupChatComponent","_ref","jobId","jobOwnerId","currentUser","membership","setMembership","members","setMembers","messages","setMessages","newMessage","setNewMessage","mentionUserId","setMentionUserId","loading","setLoading","error","setError","showNameModal","setShowNameModal","isConnected","setIsConnected","isOwner","setIsOwner","usePolling","setUsePolling","messageListRef","wsRef","pollingIntervalRef","reconnectAttempts","maxReconnectAttempts","checkMembership","response","getMembership","id","data","is_member","is_owner","err","console","fetchMembers","getMembers","fetchMessages","getMessages","startPolling","log","current","clearInterval","setInterval","stopPolling","connectWebSocket","protocol","window","location","host","wsUrl","concat","ws","WebSocket","onopen","send","JSON","stringify","type","job_posting_id","user_id","onmessage","event","parse","prev","map","msg","tempId","_objectSpread","message","sending","exists","some","onclose","setTimeout","onerror","initialize","isMember","close","scrollTop","scrollHeight","handleJoinComplete","anonymousName","anonymous_name","handleSubmit","preventDefault","trim","messageContent","now","optimisticMessage","sender_id","sender_name","sender_is_owner","mentioned_user_id","created_at","toISOString","_wsRef$current","readyState","OPEN","content","sendMessage","filter","userId","onJoin","onCancel","children","member","onClick","toString","ref","length","_members$find","find","m","onSubmit","value","onChange","target","placeholder","disabled"],"sources":["/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/src/components/message/GroupChat.js"],"sourcesContent":["// src/components/message/GroupChat.js - ポーリングフォールバック対応版\nimport React, { useState, useEffect, useRef, useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport { GroupChat as GroupChatAPI } from '../../api/api';\nimport { AuthContext } from '../../context/AuthContext';\nimport Button from '../common/Button';\nimport AnonymousNameModal from './AnonymousNameModal';\n\nconst Container = styled.div`\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n`;\n\nconst ConnectionStatus = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 8px 16px;\n  margin-bottom: 16px;\n  border-radius: var(--border-radius);\n  font-size: 14px;\n  background: ${props => props.$connected ? '#e8f5e8' : '#fff3cd'};\n  color: ${props => props.$connected ? '#155724' : '#856404'};\n  border: 1px solid ${props => props.$connected ? '#c3e6c3' : '#ffeaa7'};\n`;\n\nconst StatusIndicator = styled.span`\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: ${props => props.$connected ? '#28a745' : '#ffc107'};\n  margin-right: 8px;\n`;\n\nconst MembersBar = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 12px;\n  background: var(--background-color);\n  border-radius: var(--border-radius);\n  margin-bottom: 16px;\n  flex-wrap: wrap;\n`;\n\nconst MemberBadge = styled.span`\n  padding: 4px 12px;\n  background: ${props => props.$isOwner ? 'var(--primary-color)' : 'white'};\n  color: ${props => props.$isOwner ? 'white' : 'var(--text-color)'};\n  border: 1px solid ${props => props.$isOwner ? 'var(--primary-color)' : 'var(--border-color)'};\n  border-radius: 16px;\n  font-size: 14px;\n  cursor: ${props => props.$clickable ? 'pointer' : 'default'};\n\n  &:hover {\n    background: ${props => props.$clickable ? 'var(--background-color)' : ''};\n  }\n`;\n\nconst MembersLabel = styled.span`\n  font-weight: bold;\n  color: var(--text-light);\n  font-size: 14px;\n`;\n\nconst MessageList = styled.div`\n  flex-grow: 1;\n  overflow-y: auto;\n  margin-bottom: 16px;\n  max-height: 400px;\n  padding-right: 8px;\n\n  &::-webkit-scrollbar {\n    width: 6px;\n  }\n\n  &::-webkit-scrollbar-track {\n    background: var(--background-color);\n    border-radius: 4px;\n  }\n\n  &::-webkit-scrollbar-thumb {\n    background: var(--border-color);\n    border-radius: 4px;\n  }\n`;\n\nconst Message = styled.div`\n  margin-bottom: 16px;\n  display: flex;\n  flex-direction: column;\n  align-items: ${props => props.$sent ? 'flex-end' : 'flex-start'};\n`;\n\nconst MessageBubble = styled.div`\n  background-color: ${props => {\n    if (props.$isOwner && !props.$sent) return 'var(--primary-color)';\n    if (props.$sent) return '#4a9c5d';\n    return 'var(--background-color)';\n  }};\n  color: ${props => (props.$isOwner && !props.$sent) || props.$sent ? 'white' : 'var(--text-color)'};\n  padding: 12px 16px;\n  border-radius: 18px;\n  max-width: 70%;\n  word-break: break-word;\n  opacity: ${props => props.$sending ? 0.7 : 1};\n`;\n\nconst MessageInfo = styled.div`\n  font-size: 12px;\n  color: var(--text-light);\n  margin-top: 4px;\n`;\n\nconst MentionTag = styled.span`\n  background: rgba(255, 255, 255, 0.2);\n  padding: 2px 6px;\n  border-radius: 4px;\n  margin-right: 4px;\n  font-size: 12px;\n`;\n\nconst MessageForm = styled.form`\n  display: flex;\n  gap: 12px;\n  align-items: flex-end;\n\n  @media (max-width: 768px) {\n    flex-direction: column;\n    gap: 8px;\n  }\n`;\n\nconst InputWrapper = styled.div`\n  flex-grow: 1;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n`;\n\nconst MentionSelect = styled.select`\n  padding: 8px 12px;\n  border: 2px solid var(--border-color);\n  border-radius: var(--border-radius);\n  font-size: 14px;\n  background: white;\n\n  &:focus {\n    outline: none;\n    border-color: var(--primary-color);\n  }\n`;\n\nconst MessageInput = styled.textarea`\n  width: 100%;\n  padding: 12px 16px;\n  font-size: 16px;\n  border: 2px solid var(--border-color);\n  border-radius: var(--border-radius);\n  resize: none;\n  min-height: 60px;\n\n  &:focus {\n    outline: none;\n    border-color: var(--primary-color);\n  }\n`;\n\nconst SendButton = styled(Button)`\n  height: fit-content;\n`;\n\nconst NoMessages = styled.p`\n  text-align: center;\n  font-size: 16px;\n  color: var(--text-light);\n  margin: 48px 0;\n`;\n\nconst Loading = styled.p`\n  text-align: center;\n  font-size: 16px;\n  color: var(--text-light);\n  margin: 24px 0;\n`;\n\nconst ErrorText = styled.p`\n  text-align: center;\n  color: var(--error-color);\n  margin: 24px 0;\n`;\n\n// 日付フォーマット関数（Firefox対応）\nconst formatDate = (dateString) => {\n  if (!dateString) return '';\n  try {\n    // SQLiteのdatetime形式対応\n    const normalized = dateString.replace(' ', 'T');\n    const date = new Date(normalized);\n    if (isNaN(date.getTime())) {\n      return dateString;\n    }\n    return date.toLocaleString('ja-JP');\n  } catch (e) {\n    return dateString;\n  }\n};\n\nconst GroupChatComponent = ({ jobId, jobOwnerId }) => {\n  const { currentUser } = useContext(AuthContext);\n  const [membership, setMembership] = useState(null);\n  const [members, setMembers] = useState([]);\n  const [messages, setMessages] = useState([]);\n  const [newMessage, setNewMessage] = useState('');\n  const [mentionUserId, setMentionUserId] = useState('');\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const [showNameModal, setShowNameModal] = useState(false);\n  const [isConnected, setIsConnected] = useState(false);\n  const [isOwner, setIsOwner] = useState(false);\n  const [usePolling, setUsePolling] = useState(false);\n  const messageListRef = useRef(null);\n  const wsRef = useRef(null);\n  const pollingIntervalRef = useRef(null);\n  const reconnectAttempts = useRef(0);\n  const maxReconnectAttempts = 3;\n\n  // メンバーシップ確認\n  const checkMembership = useCallback(async () => {\n    if (!currentUser) return false;\n\n    try {\n      const response = await GroupChatAPI.getMembership(jobId, currentUser.id);\n      \n      if (response.data.is_member) {\n        setMembership(response.data.membership);\n        setIsOwner(response.data.membership.is_owner === 1);\n        return true;\n      } else if (response.data.is_owner) {\n        setShowNameModal(true);\n        setIsOwner(true);\n        return false;\n      } else {\n        setShowNameModal(true);\n        return false;\n      }\n    } catch (err) {\n      console.error('メンバーシップ確認エラー', err);\n      setError('グループチャットの確認に失敗しました');\n      return false;\n    }\n  }, [jobId, currentUser]);\n\n  // メンバー取得\n  const fetchMembers = useCallback(async () => {\n    if (!currentUser) return;\n\n    try {\n      const response = await GroupChatAPI.getMembers(jobId, currentUser.id);\n      setMembers(response.data.members);\n    } catch (err) {\n      console.error('メンバー取得エラー', err);\n    }\n  }, [jobId, currentUser]);\n\n  // メッセージ取得\n  const fetchMessages = useCallback(async () => {\n    if (!currentUser) return;\n\n    try {\n      const response = await GroupChatAPI.getMessages(jobId, currentUser.id);\n      setMessages(response.data.messages);\n    } catch (err) {\n      console.error('メッセージ取得エラー', err);\n    }\n  }, [jobId, currentUser]);\n\n  // ポーリング開始\n  const startPolling = useCallback(() => {\n    console.log('📡 ポーリングモード開始');\n    setUsePolling(true);\n    \n    if (pollingIntervalRef.current) {\n      clearInterval(pollingIntervalRef.current);\n    }\n    \n    pollingIntervalRef.current = setInterval(async () => {\n      try {\n        await fetchMessages();\n      } catch (err) {\n        console.error('ポーリング取得エラー:', err);\n      }\n    }, 3000);\n  }, [fetchMessages]);\n\n  // ポーリング停止\n  const stopPolling = useCallback(() => {\n    if (pollingIntervalRef.current) {\n      clearInterval(pollingIntervalRef.current);\n      pollingIntervalRef.current = null;\n    }\n    setUsePolling(false);\n  }, []);\n\n  // WebSocket接続\n  const connectWebSocket = useCallback(() => {\n    if (!currentUser || !membership) return;\n\n    // 再接続回数超過でポーリングに切り替え\n    if (reconnectAttempts.current >= maxReconnectAttempts) {\n      console.log('🔄 WebSocket再接続上限、ポーリングモードに切り替え');\n      startPolling();\n      return;\n    }\n\n    try {\n      const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n      const host = window.location.host;\n      const wsUrl = `${protocol}//${host}/nikko/ws`;\n\n      console.log('WebSocket接続試行中...', wsUrl);\n      const ws = new WebSocket(wsUrl);\n      wsRef.current = ws;\n\n      ws.onopen = () => {\n        console.log('✅ グループチャットWebSocket接続成功');\n        setIsConnected(true);\n        stopPolling();\n        reconnectAttempts.current = 0;\n\n        ws.send(JSON.stringify({\n          type: 'join_group_room',\n          job_posting_id: jobId,\n          user_id: currentUser.id,\n          is_owner: isOwner\n        }));\n      };\n\n      ws.onmessage = (event) => {\n        try {\n          const data = JSON.parse(event.data);\n\n          switch (data.type) {\n            case 'group_room_joined':\n              console.log('✅ グループルーム参加確認');\n              break;\n\n            case 'group_message_sent':\n              setMessages(prev => prev.map(msg =>\n                msg.tempId === data.tempId\n                  ? { ...msg, id: data.message.id, sending: false }\n                  : msg\n              ));\n              break;\n\n            case 'new_group_message':\n              setMessages(prev => {\n                const exists = prev.some(msg => msg.id === data.message.id);\n                if (exists) return prev;\n                return [...prev, data.message];\n              });\n              break;\n\n            case 'group_message_error':\n              setError('メッセージの送信に失敗しました');\n              break;\n\n            default:\n              break;\n          }\n        } catch (err) {\n          console.error('WebSocketメッセージ解析エラー', err);\n        }\n      };\n\n      ws.onclose = () => {\n        console.log('🔌 グループチャットWebSocket切断');\n        setIsConnected(false);\n        \n        reconnectAttempts.current += 1;\n        \n        if (reconnectAttempts.current < maxReconnectAttempts) {\n          setTimeout(() => {\n            if (membership) connectWebSocket();\n          }, 5000);\n        } else {\n          console.log('🔄 再接続上限、ポーリングモードに切り替え');\n          startPolling();\n        }\n      };\n\n      ws.onerror = (error) => {\n        console.error('WebSocketエラー', error);\n        setIsConnected(false);\n      };\n\n    } catch (err) {\n      console.error('❌ WebSocket接続失敗:', err);\n      setIsConnected(false);\n      startPolling();\n    }\n  }, [currentUser, membership, jobId, isOwner, startPolling, stopPolling]);\n\n  // 初期化\n  useEffect(() => {\n    const initialize = async () => {\n      setLoading(true);\n      const isMember = await checkMembership();\n      \n      if (isMember) {\n        await fetchMembers();\n        await fetchMessages();\n      }\n      \n      setLoading(false);\n    };\n\n    initialize();\n  }, [checkMembership, fetchMembers, fetchMessages]);\n\n  // WebSocket接続開始\n  useEffect(() => {\n    if (membership && !loading) {\n      connectWebSocket();\n    }\n\n    return () => {\n      if (wsRef.current) {\n        wsRef.current.close();\n      }\n      stopPolling();\n    };\n  }, [membership, loading, connectWebSocket, stopPolling]);\n\n  // 自動スクロール\n  useEffect(() => {\n    if (messageListRef.current) {\n      messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n    }\n  }, [messages]);\n\n  // 参加完了ハンドラ\n  const handleJoinComplete = async (anonymousName) => {\n    setShowNameModal(false);\n    setMembership({ anonymous_name: anonymousName, is_owner: isOwner ? 1 : 0 });\n    \n    await fetchMembers();\n    await fetchMessages();\n  };\n\n  // メッセージ送信\n  const handleSubmit = async (e) => {\n    e.preventDefault();\n    \n    if (!newMessage.trim() || !membership) return;\n\n    const messageContent = newMessage.trim();\n    const tempId = Date.now();\n\n    const optimisticMessage = {\n      id: tempId,\n      tempId: tempId,\n      message: messageContent,\n      sender_id: currentUser.id,\n      sender_name: membership.anonymous_name,\n      sender_is_owner: isOwner ? 1 : 0,\n      mentioned_user_id: mentionUserId || null,\n      created_at: new Date().toISOString(),\n      sending: true\n    };\n\n    setMessages(prev => [...prev, optimisticMessage]);\n    setNewMessage('');\n    setMentionUserId('');\n\n    try {\n      if (isConnected && wsRef.current?.readyState === WebSocket.OPEN) {\n        wsRef.current.send(JSON.stringify({\n          type: 'group_message',\n          job_posting_id: jobId,\n          sender_id: currentUser.id,\n          content: messageContent,\n          mentioned_user_id: mentionUserId || null,\n          tempId: tempId\n        }));\n      } else {\n        // HTTP APIフォールバック\n        await GroupChatAPI.sendMessage(jobId, {\n          sender_id: currentUser.id,\n          message: messageContent,\n          mentioned_user_id: mentionUserId || null\n        });\n        \n        // 送信完了を反映\n        setMessages(prev => prev.map(msg =>\n          msg.tempId === tempId\n            ? { ...msg, sending: false }\n            : msg\n        ));\n        \n        // 最新メッセージを取得\n        await fetchMessages();\n      }\n    } catch (err) {\n      console.error('メッセージ送信エラー', err);\n      setMessages(prev => prev.filter(msg => msg.tempId !== tempId));\n      setNewMessage(messageContent);\n      setError('メッセージの送信に失敗しました');\n    }\n  };\n\n  // ニックネーム選択モーダル\n  if (showNameModal) {\n    return (\n      <AnonymousNameModal\n        jobId={jobId}\n        userId={currentUser?.id}\n        onJoin={handleJoinComplete}\n        onCancel={() => setShowNameModal(false)}\n      />\n    );\n  }\n\n  if (loading) {\n    return <Loading>読み込み中...</Loading>;\n  }\n\n  if (error && !membership) {\n    return <ErrorText>{error}</ErrorText>;\n  }\n\n  if (!membership) {\n    return <Loading>グループチャットに参加してください</Loading>;\n  }\n\n  return (\n    <Container>\n      <ConnectionStatus $connected={isConnected}>\n        <StatusIndicator $connected={isConnected} />\n        {isConnected ? 'リアルタイム接続中' : \n         usePolling ? 'オフラインモード（自動更新中）' : '接続中...'}\n      </ConnectionStatus>\n\n      <MembersBar>\n        <MembersLabel>参加者:</MembersLabel>\n        {members.map((member) => (\n          <MemberBadge \n            key={member.id} \n            $isOwner={member.is_owner === 1}\n            $clickable={isOwner && member.is_owner !== 1}\n            onClick={() => {\n              if (isOwner && member.is_owner !== 1) {\n                setMentionUserId(member.user_id.toString());\n              }\n            }}\n          >\n            {member.anonymous_name}\n            {member.is_owner === 1 && ' (求人主)'}\n          </MemberBadge>\n        ))}\n      </MembersBar>\n\n      <MessageList ref={messageListRef}>\n        {messages.length === 0 ? (\n          <NoMessages>メッセージはまだありません</NoMessages>\n        ) : (\n          messages.map((msg) => (\n            <Message \n              key={msg.id || msg.tempId} \n              $sent={msg.sender_id === currentUser.id}\n            >\n              <MessageBubble\n                $sent={msg.sender_id === currentUser.id}\n                $isOwner={msg.sender_is_owner === 1}\n                $sending={msg.sending}\n              >\n                {msg.mentioned_user_id && (\n                  <MentionTag>\n                    @{members.find(m => m.user_id === msg.mentioned_user_id)?.anonymous_name || '---'}\n                  </MentionTag>\n                )}\n                {msg.message}\n              </MessageBubble>\n              <MessageInfo>\n                {msg.sender_name}\n                {msg.sender_is_owner === 1 && ' (求人主)'}\n                {' • '}\n                {formatDate(msg.created_at)}\n                {msg.sending && ' • 送信中...'}\n              </MessageInfo>\n            </Message>\n          ))\n        )}\n      </MessageList>\n\n      <MessageForm onSubmit={handleSubmit}>\n        <InputWrapper>\n          {isOwner && members.length > 1 && (\n            <MentionSelect\n              value={mentionUserId}\n              onChange={(e) => setMentionUserId(e.target.value)}\n            >\n              <option value=\"\">全員に送信</option>\n              {members\n                .filter(m => m.is_owner !== 1)\n                .map(m => (\n                  <option key={m.user_id} value={m.user_id}>\n                    @{m.anonymous_name} に送信\n                  </option>\n                ))\n              }\n            </MentionSelect>\n          )}\n          <MessageInput\n            value={newMessage}\n            onChange={(e) => setNewMessage(e.target.value)}\n            placeholder=\"メッセージを入力...\"\n          />\n        </InputWrapper>\n        <SendButton type=\"submit\" disabled={!newMessage.trim()}>\n          送信\n        </SendButton>\n      </MessageForm>\n    </Container>\n  );\n};\n\nexport default GroupChatComponent;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}