/* eslint-disable */
// =============================================================
// 云版编辑能力 —— 覆盖 window.TaskModal:加状态切换、进度备注、权限
// A:改状态  B:写进度  G:权限(本人 / 协助 / pengtao 可改)
// =============================================================

const STATUS_OPTIONS = [
  { v: 'todo',    label: '待启动', cls: 'st-todo' },
  { v: 'doing',   label: '进行中', cls: 'st-doing' },
  { v: 'blocked', label: '阻塞',   cls: 'st-blocked' },
  { v: 'paused',  label: '暂缓',   cls: 'st-paused' },
  { v: 'done',    label: '完成',   cls: 'st-done' },
];

function canEditTask(task) {
  const me = window.CURRENT_USER;
  if (!me) return false;
  if (me === 'pengtao') return true;                       // 负责人:全权
  if (task.owner === me) return true;                      // 自己的
  if ((task.assists || []).includes(me)) return true;      // 协助的
  return false;
}

function fmtTime(iso) {
  const d = new Date(iso);
  const now = new Date();
  const diffH = (now - d) / 3600000;
  if (diffH < 1) return Math.max(1, Math.round(diffH * 60)) + ' 分钟前';
  if (diffH < 24) return Math.round(diffH) + ' 小时前';
  const diffD = Math.round(diffH / 24);
  if (diffD < 30) return diffD + ' 天前';
  return d.toLocaleDateString('zh-CN');
}

function CloudTaskModal({ task, onClose }) {
  const [logs, setLogs] = useState([]);
  const [draft, setDraft] = useState('');
  const [busy, setBusy] = useState(false);
  const [err, setErr] = useState(null);
  const owner = U.memberById(task.owner);
  const editable = canEditTask(task);
  const meId = window.CURRENT_USER;
  const me = U.memberById(meId);

  // 拉日志(进度备注 + 状态变更)
  async function loadLogs() {
    const { data, error } = await SB.client
      .from('task_updates')
      .select('*')
      .eq('task_id', task.id)
      .order('created_at', { ascending: false })
      .limit(50);
    if (!error) setLogs(data || []);
  }
  useEffect(() => { loadLogs(); }, [task.id]);

  async function changeStatus(newStatus) {
    if (newStatus === task.status) return;
    setBusy(true); setErr(null);
    try {
      const old = task.status;
      await SB.patchTask(task.id, { status: newStatus }, meId);
      await SB.addLog(task.id, meId, 'status', null, old, newStatus);
      // 本地立即更新(Realtime 也会触发,这里先快显)
      task.status = newStatus;
      task.updatedAt = 0;
      await loadLogs();
    } catch (e) { setErr(e.message || String(e)); }
    setBusy(false);
  }

  async function postProgress() {
    if (!draft.trim()) return;
    setBusy(true); setErr(null);
    try {
      await SB.addLog(task.id, meId, 'progress', draft.trim());
      // 同时拍一下 task 的 updated_at,让"僵尸"标签消失
      await SB.patchTask(task.id, {}, meId);
      task.updatedAt = 0;
      setDraft('');
      await loadLogs();
    } catch (e) { setErr(e.message || String(e)); }
    setBusy(false);
  }

  return (
    <div className="modal-bg" onClick={onClose}>
      <div className="modal" onClick={e=>e.stopPropagation()}>
        <div className="modal-head">
          <UrgencyDot task={task}/>
          <h3>{task.name}</h3>
          <button className="x" onClick={onClose}>×</button>
        </div>

        <div className="modal-meta">
          <div><span className="lbl">负责人</span><Avatar id={task.owner} size={20}/><span>{owner?.name}</span></div>
          <div><span className="lbl">截止</span><span>{U.dueLabel(task)}{task.dueDate?` (${task.dueDate})`:''}</span></div>
          <div><span className="lbl">最近更新</span><span>{task.updatedAt} 天前</span></div>
          {task.assists && task.assists.length>0 &&
            <div><span className="lbl">协助</span>{task.assists.map(a=>(<Avatar key={a} id={a} size={18}/>))}</div>}
          {task.raw && <div><span className="lbl">说明</span><span className="raw">{task.raw}</span></div>}
        </div>

        {/* ===== A. 状态切换 ===== */}
        <div className="ce-section">
          <div className="ce-section-h">
            <span>状态</span>
            {!editable && <span className="ce-lock">🔒 你不能改这条(只有负责人/协助人/彭韬能改)</span>}
          </div>
          <div className="ce-status-row">
            {STATUS_OPTIONS.map(o => (
              <button key={o.v}
                className={`ce-st ${o.cls} ${task.status===o.v?'on':''}`}
                disabled={!editable || busy}
                onClick={()=>changeStatus(o.v)}>
                {o.label}
              </button>
            ))}
          </div>
        </div>

        {/* ===== B. 进度备注 ===== */}
        <div className="ce-section">
          <div className="ce-section-h">
            <span>进度日志</span>
            <span className="ce-sub">{logs.length} 条</span>
          </div>
          {editable && (
            <div className="ce-input">
              <textarea
                rows="2"
                placeholder={`以 ${me?.name || '我'} 身份记一行今天的进度…(回车提交,Shift+回车换行)`}
                value={draft}
                onChange={e=>setDraft(e.target.value)}
                onKeyDown={e=>{
                  if (e.key==='Enter' && !e.shiftKey) { e.preventDefault(); postProgress(); }
                }}
                disabled={busy}/>
              <button className="btn-primary" onClick={postProgress} disabled={busy || !draft.trim()}>
                {busy ? '保存中…' : '记录'}
              </button>
            </div>
          )}
          {err && <div className="ce-err">{err}</div>}
          <div className="ce-log-list">
            {logs.length === 0 && <div className="cmt-empty">暂无日志。{editable && '在上方写一行开始。'}</div>}
            {logs.map(l => {
              const m = U.memberById(l.member_id);
              return (
                <div className={`ce-log ce-log-${l.kind}`} key={l.id}>
                  <Avatar id={l.member_id} size={22}/>
                  <div className="ce-log-body">
                    <div className="ce-log-head">
                      <b>{m?.name || l.member_id}</b>
                      <span className="ce-log-at">{fmtTime(l.created_at)}</span>
                      {l.kind === 'status' && <span className="ce-kind-tag">改状态</span>}
                      {l.kind === 'create' && <span className="ce-kind-tag">创建</span>}
                    </div>
                    <div className="ce-log-text">
                      {l.kind === 'status'
                        ? <>{statusLabel(l.old_value)} → <b>{statusLabel(l.new_value)}</b></>
                        : l.content}
                    </div>
                  </div>
                </div>
              );
            })}
          </div>
        </div>
      </div>
    </div>
  );
}

function statusLabel(v) {
  const o = STATUS_OPTIONS.find(x=>x.v===v);
  return o ? o.label : (v || '—');
}

// 覆盖原 TaskModal
window.TaskModal = CloudTaskModal;

// =============================================================
// C. 新建任务
// =============================================================
function CloudNewTask() {
  const [open, setOpen] = useState(false);
  const [name, setName] = useState('');
  const [ownerId, setOwnerId] = useState(window.CURRENT_USER);
  const [priority, setPriority] = useState('medium');
  const [dueDate, setDueDate] = useState('');
  const [raw, setRaw] = useState('');
  const [busy, setBusy] = useState(false);
  const [err, setErr] = useState(null);

  const meId = window.CURRENT_USER;
  const isAdmin = meId === 'pengtao';

  function reset() {
    setName(''); setOwnerId(meId); setPriority('medium');
    setDueDate(''); setRaw(''); setErr(null);
  }
  function close() { setOpen(false); reset(); }

  async function submit() {
    if (!name.trim()) { setErr('任务名必填'); return; }
    setBusy(true); setErr(null);
    try {
      const id = 'tu_' + Math.random().toString(36).slice(2, 10);
      const { error } = await SB.client.from('tasks').insert({
        id, name: name.trim(),
        owner_id: ownerId,
        priority, status: 'todo',
        due_date: dueDate || null,
        raw: raw.trim() || null,
        created_by: meId, updated_by: meId,
      });
      if (error) throw error;
      await SB.addLog(id, meId, 'create', '(新建任务)');
      close();
    } catch (e) { setErr(e.message || String(e)); }
    setBusy(false);
  }

  return (
    <>
      <button className="cw-fab" onClick={()=>setOpen(true)} title="新建任务">
        <span>＋</span><span className="cw-fab-lbl">新任务</span>
      </button>
      {open && (
        <div className="modal-bg" onClick={close}>
          <div className="modal cw-new-modal" onClick={e=>e.stopPropagation()}>
            <div className="modal-head">
              <h3>新建任务</h3>
              <button className="x" onClick={close}>×</button>
            </div>
            <div className="cw-new-form">
              <label>
                <span className="cw-lbl">任务名 *</span>
                <input value={name} onChange={e=>setName(e.target.value)}
                  placeholder="一句话描述,例:阴离子测试" autoFocus
                  onKeyDown={e=>e.key==='Enter' && submit()}/>
              </label>
              <label>
                <span className="cw-lbl">负责人 *</span>
                <select value={ownerId} onChange={e=>setOwnerId(e.target.value)} disabled={!isAdmin}>
                  {window.MEMBERS.map(m =>
                    <option key={m.id} value={m.id}>{m.name}{m.id===meId?'(我)':''}</option>
                  )}
                </select>
                {!isAdmin && <span className="cw-hint">(非负责人只能给自己派任务)</span>}
              </label>
              <div className="cw-new-row">
                <label className="cw-half">
                  <span className="cw-lbl">优先级</span>
                  <select value={priority} onChange={e=>setPriority(e.target.value)}>
                    <option value="high">高</option>
                    <option value="medium">中</option>
                    <option value="low">低</option>
                  </select>
                </label>
                <label className="cw-half">
                  <span className="cw-lbl">截止日</span>
                  <input type="date" value={dueDate} onChange={e=>setDueDate(e.target.value)}/>
                </label>
              </div>
              <label>
                <span className="cw-lbl">备注</span>
                <textarea rows="2" value={raw} onChange={e=>setRaw(e.target.value)}
                  placeholder="可选,例:本周内 / 配合谁 等"/>
              </label>
              {err && <div className="ce-err">{err}</div>}
              <div className="cw-new-actions">
                <button className="btn-secondary" onClick={close}>取消</button>
                <button className="btn-primary" onClick={submit} disabled={busy || !name.trim()}>
                  {busy ? '创建中…' : '创建'}
                </button>
              </div>
            </div>
          </div>
        </div>
      )}
    </>
  );
}

Object.assign(window, { CloudNewTask });
