// ===========================================================
// Wizards: AddCustomerModal + AddPartnerWizard
// 2 form đa bước để Coder build theo
// ===========================================================

// SĐT hợp lệ = 9-11 chữ số (bỏ khoảng trắng, dấu +, gạch ngang)
function __phoneValid(p) {
  const d = String(p || '').replace(/\D/g, '');
  return d.length >= 9 && d.length <= 11;
}

// ---------- ADD CUSTOMER ----------
function AddCustomerModal({ onClose, onSave, role }) {
  const [data, setData] = useState({
    custType:'individual', // individual | business — quyết định trường cần điền
    types:['retail'],      // Loại khách hàng — chọn nhiều; phần tử đầu = loại chính
    name:'', phone:'', email:'', gender:'female', birthYear:'', city:'TP.HCM',
    // — riêng khách doanh nghiệp / tổ chức
    company:'', taxId:'', bizType:'company', contactRole:'', address:'',    channel:'store',
    affiliateId:'',
    consent:{ call:true, sms:true, email:true, zalo:true },
    preferredContact:'Zalo',
    tags:[], notes:'',
    owner:'', // người phụ trách — chỉ Marketing / Admin chọn được (quyền customers.assign); trống = chính mình
  });
  // Marketing đẩy khách cho nhân viên bán hàng: chọn người phụ trách ngay khi tạo
  const canAssign = !!(role && window.tvsCan && tvsCan(role, 'customers.assign'));
  const staffOptions = canAssign ? window.tvsSalesStaff() : [];
  const [saving, setSaving] = useState(false);
  const [done, setDone] = useState(false);

  const update = (k, v) => setData(d => ({...d, [k]: v}));
  const updateConsent = (k, v) => setData(d => ({...d, consent: {...d.consent, [k]: v}}));
  // Chọn nhiều loại khách — click lần 2 bỏ chọn (kể cả loại cuối cùng); để trống thì chặn ở nút Tiếp tục
  const toggleType = (t) => setData(d => ({
    ...d,
    types: d.types.includes(t) ? d.types.filter(x => x !== t) : [...d.types, t],
  }));
  const toggleTag = (t) => setData(d => ({...d, tags: d.tags.includes(t) ? d.tags.filter(x => x !== t) : [...d.tags, t]}));

  const isBiz = data.custType === 'business';
  // Đổi cá nhân ⇄ tổ chức: lọc lại loại khách cho hợp lệ
  useEffect(() => {
    const valid = (D.typeOptions || []).filter(o => o.kind === data.custType).map(o => o.id);
    setData(d => ({...d, types: d.types.filter(t => valid.includes(t))}));
  }, [data.custType]);
  // Kênh ưa thích phải là kênh khách đã đồng ý — tự chuyển khi bỏ tick consent
  useEffect(() => {
    const KEY = {'Gọi điện':'call','Zalo':'zalo','SMS':'sms','Email':'email'};
    const k = KEY[data.preferredContact];
    if (k && !data.consent[k]) {
      const first = Object.keys(KEY).find(l => data.consent[KEY[l]]) || 'Cửa hàng';
      setData(d => ({...d, preferredContact: first}));
    }
  }, [data.consent, data.preferredContact]);
  // Cảnh báo trùng SĐT với khách đã có — check quan trọng nhất của CRM
  const dupCustomer = (() => {
    const d = String(data.phone || '').replace(/\D/g, '');
    if (d.length < 9) return null;
    return D.customers.find(c => String(c.phone || '').replace(/\D/g, '') === d) || null;
  })();

  // Điều kiện tạo khách — form gộp 1 trang, không còn bước
  const canNext = (() => {
    const phoneOk = __phoneValid(data.phone) && !dupCustomer;
    if (!data.types.length) return false;
    return isBiz
      ? (data.company.trim() && data.name.trim() && phoneOk)
      : (data.name.trim() && phoneOk);
  })();

  // Huỷ giữa chừng (đóng modal) thì không tạo khách nữa — dọn timeout khi unmount
  const saveTimers = useRef([]);
  useEffect(() => () => saveTimers.current.forEach(clearTimeout), []);
  const save = () => {
    setSaving(true);
    saveTimers.current.push(setTimeout(() => {
      setSaving(false); setDone(true);
      saveTimers.current.push(setTimeout(() => onSave && onSave(data), 1100));
    }, 700));
  };

  const Req = () => <span style={{color:'var(--status-sale)'}}>*</span>;
  const chipCls = (on) => on ? 'btn btn-cta btn-sm' : 'btn btn-secondary btn-sm';
  const CITIES = ['TP.HCM','Hà Nội','Đà Nẵng','Hải Phòng','Cần Thơ','Khác'];
  const CHANNELS = [
    {k:'store',l:'Cửa hàng',ic:'store'},
    {k:'web',  l:'Web/App',ic:'home'},
    {k:'telesale',l:'Telesale',ic:'phone'},
    {k:'facebook',l:'Facebook',ic:'chat'},
    {k:'tiktok',l:'TikTok',ic:'sparkles'},
    {k:'shopee',l:'Shopee',ic:'cart'},
    {k:'zalo',l:'Zalo',ic:'chat'},
    {k:'referral',l:'Giới thiệu',ic:'users'},
    {k:'event',l:'Event',ic:'calendar'},
    {k:'other',l:'Khác',ic:'more'},
  ];
  // Tags nhóm theo 3 trục: nhóm hàng (theo catalog thật TVS) · mục tiêu sức khoẻ / điều kiện thương mại · đặc điểm khách / mức ưu tiên
  const PRODUCT_GROUPS = ['Sắc đẹp — Da & Tóc','Vitamin & Khoáng tổng hợp','Miễn dịch & Đề kháng','Tim mạch & Omega-3','Tiêu hoá & Probiotic','Xương khớp & Canxi','Giấc ngủ & Thư giãn','Năng lượng & Trí não','Sức khoẻ Nam','Sức khoẻ Nữ','Gan & Thải độc','Mắt','Đường huyết & Cân nặng','Thể hình — Sports'];
  const TAG_GROUPS = isBiz ? [
    {h:'Nhóm hàng quan tâm', items:PRODUCT_GROUPS},
    {h:'Mức ưu tiên', items:['Ưu tiên cao','Khách trọng điểm','Mới — cần onboarding','Đang đàm phán']},
  ] : [
    {h:'Nhóm hàng quan tâm', items:PRODUCT_GROUPS},
    {h:'Mục tiêu sức khoẻ', items:['Tăng cơ','Giảm cân','Tăng đề kháng','Đẹp da — chống lão hoá','Ngủ ngon','Giảm stress','Xương khớp','Tiêu hoá','Tim mạch','Sinh lý','Tiền mãn kinh','Trí nhớ — tập trung']},
  ];

  return (
    // Toàn màn hình — không đóng khi bấm nền tối, chỉ đóng bằng nút X (lỡ tay là mất hết dữ liệu đã nhập)
    <div className="drawer-overlay" style={{animation:'none'}}>
      <div onClick={(e) => e.stopPropagation()} className="addcust"
        style={{position:'fixed',inset:0,width:'100vw',height:'100vh',background:'var(--bg-page)',display:'flex',flexDirection:'column',overflow:'hidden',animation:'fadein 0.2s ease-out'}}>

        {/* Header */}
        <div style={{padding:'12px 28px',background:'var(--vs-dark-blue)',color:'#fff',flexShrink:0}}>
          <div className="row">
            <div style={{flex:1}}>
              <div className="eyebrow" style={{color:'var(--vs-light-blue)'}}>Đăng ký khách hàng mới</div>
              <h2 style={{margin:'2px 0 0',fontFamily:'var(--font-display)',fontSize:22,fontWeight:700,color:'#fff'}}>
                {done ? 'Hoàn tất!' : isBiz ? 'Thông tin doanh nghiệp' : 'Thông tin khách hàng'}
              </h2>
            </div>
            <button onClick={onClose} title="Đóng" style={{background:'rgba(255,255,255,0.18)',border:'none',color:'#fff',width:36,height:36,borderRadius:'50%',cursor:'pointer',display:'inline-flex',alignItems:'center',justifyContent:'center'}}>
              <Icon name="close" size={16}/>
            </button>
          </div>
        </div>

        {/* Body */}
        <div style={{padding:'18px 28px 12px',overflow:'auto',flex:1,minHeight:0}}>
          {done ? (
            <div style={{height:'100%',display:'flex',flexDirection:'column',alignItems:'center',justifyContent:'center',textAlign:'center'}}>
              <div style={{width:80,height:80,borderRadius:'50%',background:'var(--status-success)',color:'#fff',display:'inline-flex',alignItems:'center',justifyContent:'center',marginBottom:'var(--space-4)'}}>
                <Icon name="check" size={40} stroke={3}/>
              </div>
              <h3 style={{fontFamily:'var(--font-display)',fontSize:24,fontWeight:700,color:'var(--fg-1)',margin:0}}>Đã tạo khách hàng</h3>
              <p className="text-sm fg-muted mt-2">
                {isBiz
                  ? <>Hồ sơ đã tạo cho <b>{data.company}</b> · người liên hệ <b>{data.name}</b></>
                  : <>Mã thành viên đã được cấp · SMS chào mừng đã gửi tới <b className="tnum">{data.phone}</b></>}
              </p>
            </div>
          ) : (
            <div className="addcust-grid">

              {/* ===== CỘT TRÁI — THÔNG TIN CƠ BẢN ===== */}
              <div>
                <div className="addcust-col-h">Thông tin cơ bản</div>

                {/* Hồ sơ cá nhân hay tổ chức — quyết định các trường cần điền */}
                <div className="grid grid-2" style={{gap:10,marginBottom:12}}>
                  {[
                    {k:'individual', l:'Cá nhân', d:'Khách lẻ, bác sĩ, dược sĩ, affiliate, KOC…', ic:'user'},
                    {k:'business',   l:'Tổ chức / Doanh nghiệp', d:'Nhà thuốc, gym, spa, đại lý, công ty…', ic:'briefcase'},
                  ].map(o => {
                    const on = data.custType === o.k;
                    return (
                      <button key={o.k} onClick={() => update('custType', o.k)}
                        style={{
                          display:'flex',gap:10,alignItems:'center',textAlign:'left',
                          padding:'10px 12px',cursor:'pointer',
                          background: on ? 'rgba(65,182,230,0.08)' : 'var(--bg-page)',
                          border:`2px solid ${on ? 'var(--vs-light-blue)' : 'var(--border-1)'}`,
                          borderRadius:'var(--radius-md)',font:'inherit',
                        }}>
                        <span style={{width:32,height:32,borderRadius:'var(--radius-sm)',flexShrink:0,display:'flex',alignItems:'center',justifyContent:'center',background: on ? 'var(--vs-dark-blue)' : 'var(--bg-soft)',color: on ? '#fff' : 'var(--fg-muted)'}}>
                          <Icon name={o.ic} size={16}/>
                        </span>
                        <span style={{flex:1,minWidth:0}}>
                          <span className="bold" style={{display:'block',color: on ? 'var(--vs-dark-blue)' : 'var(--fg-1)',fontSize:13}}>{o.l}</span>
                          <span className="text-xs fg-muted" style={{display:'block',marginTop:1,lineHeight:1.35}}>{o.d}</span>
                        </span>
                        {on && <Icon name="check" size={16} stroke={3} style={{color:'var(--vs-light-blue)',flexShrink:0}}/>}
                      </button>
                    );
                  })}
                </div>

                {isBiz && (
                  <>
                    <div className="grid grid-2" style={{marginBottom:12}}>
                      <div>
                        <div className="field-label">Tên doanh nghiệp / cửa hàng <Req/></div>
                        <input className="input" autoFocus placeholder="Nhà thuốc Long Châu — Q.3" value={data.company} onChange={(e)=>update('company',e.target.value)}/>
                      </div>
                      <div>
                        <div className="field-label">Mã số thuế</div>
                        <input className="input tnum" placeholder="0301234567" value={data.taxId} onChange={(e)=>update('taxId',e.target.value)}/>
                      </div>
                    </div>
                    <div style={{marginBottom:12}}>
                      <div className="field-label">Địa chỉ</div>
                      <input className="input" placeholder="88 Nguyễn Đình Chiểu, Q.3, TP.HCM" value={data.address} onChange={(e)=>update('address',e.target.value)}/>
                    </div>
                    <div className="text-xs fg-muted" style={{fontWeight:700,letterSpacing:'0.08em',textTransform:'uppercase',marginBottom:6}}>Người liên hệ chính</div>
                  </>
                )}

                <div className="grid grid-2" style={{marginBottom:12}}>
                  <div>
                    <div className="field-label">{isBiz ? 'Họ tên người liên hệ' : 'Họ và tên'} <Req/></div>
                    <input className="input" autoFocus={!isBiz} placeholder={isBiz ? 'Dược sĩ Trần Văn Minh' : 'Đặng Hoàng Mai'} value={data.name} onChange={(e)=>update('name',e.target.value)}/>
                  </div>
                  <div>
                    <div className="field-label">SĐT <Req/></div>
                    <input className="input tnum" placeholder="0903 821 447" value={data.phone} onChange={(e)=>update('phone',e.target.value)}
                      style={dupCustomer ? {borderColor:'var(--status-sale)'} : undefined}/>
                    {data.phone && !__phoneValid(data.phone) && (
                      <div className="text-xs mt-1" style={{color:'var(--status-sale)'}}>SĐT cần 9–11 chữ số</div>
                    )}
                    {dupCustomer && (
                      <div className="text-xs mt-1" style={{color:'var(--status-sale)',fontWeight:700}}>
                        ⚠ Trùng SĐT với khách <b>{dupCustomer.name}</b> ({dupCustomer.id}) — kiểm tra trước khi tạo mới
                      </div>
                    )}
                  </div>
                </div>

                {isBiz ? (
                  <div className="grid grid-3" style={{marginBottom:12}}>
                    <div>
                      <div className="field-label">Email</div>
                      <input className="input" placeholder="lc.q3@longchau.vn" value={data.email} onChange={(e)=>update('email',e.target.value)}/>
                    </div>
                    <div>
                      <div className="field-label">Chức vụ</div>
                      <input className="input" placeholder="Chủ nhà thuốc / Quản lý" value={data.contactRole} onChange={(e)=>update('contactRole',e.target.value)}/>
                    </div>
                    <div>
                      <div className="field-label">Thành phố</div>
                      <select className="select" value={data.city} onChange={(e)=>update('city',e.target.value)}>
                        {CITIES.map(c => <option key={c}>{c}</option>)}
                      </select>
                    </div>
                  </div>
                ) : (
                  <>
                    <div style={{marginBottom:12}}>
                      <div className="field-label">Email</div>
                      <input className="input" placeholder="mai.dang@email.vn" value={data.email} onChange={(e)=>update('email',e.target.value)}/>
                    </div>
                    <div className="grid grid-3" style={{marginBottom:12}}>
                      <div>
                        <div className="field-label">Giới tính</div>
                        <Segmented value={data.gender} options={[
                          {value:'female',label:'Nữ'},{value:'male',label:'Nam'},{value:'other',label:'Khác'}
                        ]} onChange={(v)=>update('gender',v)}/>
                      </div>
                      <div>
                        <div className="field-label">Năm sinh</div>
                        <input className="input tnum" placeholder="1992" value={data.birthYear} onChange={(e)=>update('birthYear',e.target.value)}/>
                      </div>
                      <div>
                        <div className="field-label">Thành phố</div>
                        <select className="select" value={data.city} onChange={(e)=>update('city',e.target.value)}>
                          {CITIES.map(c => <option key={c}>{c}</option>)}
                        </select>
                      </div>
                    </div>
                  </>
                )}

                <div style={{marginBottom:12}}>
                  <div className="field-label">Kênh đăng ký</div>
                  <div className="row gap-1" style={{flexWrap:'wrap'}}>
                    {CHANNELS.map(c => (
                      <button key={c.k} className={chipCls(data.channel===c.k)} onClick={() => update('channel',c.k)}>
                        <Icon name={c.ic} size={12}/>{c.l}
                      </button>
                    ))}
                  </div>
                </div>

                {canAssign && (
                  <div style={{marginBottom:12}}>
                    <div className="field-label">Người phụ trách <span className="fg-muted" style={{fontWeight:400,textTransform:'none',letterSpacing:0}}>— gán khách này cho nhân viên bán hàng</span></div>
                    <select className="select" value={data.owner} onChange={(e)=>update('owner',e.target.value)}>
                      <option value="">{role && role.person ? `Chính tôi (${role.person})` : 'Chính tôi'}</option>
                      {staffOptions.filter(o => !role || o !== role.person).map(o => <option key={o} value={o}>{o}</option>)}
                    </select>
                  </div>
                )}
                {/* Loại khách hàng — chọn NHIỀU, loại tick đầu tiên là loại chính */}
                <div>
                  <div className="field-label">Loại khách hàng <Req/> <span className="fg-muted" style={{fontWeight:400,textTransform:'none',letterSpacing:0}}>— chọn nhiều được, tick đầu tiên là loại chính</span></div>
                  <div className="row gap-1" style={{flexWrap:'wrap'}}>
                    {(D.typeOptions || []).filter(o => o.kind === data.custType).map(o => {
                      const on = data.types.includes(o.id);
                      const primary = data.types[0] === o.id;
                      return (
                        <button key={o.id} className={chipCls(on)} onClick={() => toggleType(o.id)}>
                          {on ? <Icon name="check" size={11}/> : <Icon name="plus" size={11}/>}{o.label}
                          {primary && <span style={{fontSize:9,opacity:.75,marginLeft:2}}>chính</span>}
                        </button>
                      );
                    })}
                  </div>
                  {data.types.length === 0 && (
                    <div className="text-xs mt-2" style={{color:'var(--status-sale)',fontWeight:700}}>
                      ⚠ Cần chọn ít nhất 1 loại khách hàng.
                    </div>
                  )}
                  {data.types.some(t => t.startsWith('affiliate') || t === 'koc') && (
                    <div style={{marginTop:10}}>
                      <div className="field-label">Mã affiliate / ID sàn <span className="fg-muted" style={{fontWeight:400,textTransform:'none',letterSpacing:0}}>— để đối chiếu doanh số từ TikTok Shop</span></div>
                      <input className="input tnum" placeholder="TT-DS-1188" value={data.affiliateId} onChange={(e)=>update('affiliateId',e.target.value)}/>
                    </div>
                  )}
                </div>
              </div>

              {/* ===== CỘT PHẢI — NHU CẦU & GHI CHÚ ===== */}
              <div>
                <div className="addcust-col-h">
                  <span>Nhu cầu & ghi chú</span>
                  <span className="fg-muted" style={{marginLeft:'auto',fontWeight:400,textTransform:'none',letterSpacing:0}}>Đã chọn {data.tags.length} tag</span>
                </div>

                {TAG_GROUPS.map(g => (
                  <div key={g.h} style={{marginBottom:12}}>
                    <div className="field-label">{g.h}</div>
                    <div className="row gap-1" style={{flexWrap:'wrap'}}>
                      {g.items.map(t => (
                        <button key={t} className={chipCls(data.tags.includes(t))} onClick={() => toggleTag(t)}>
                          {data.tags.includes(t) ? <Icon name="check" size={11}/> : <Icon name="plus" size={11}/>}{t}
                        </button>
                      ))}
                    </div>
                  </div>
                ))}

                <div>
                  <div className="field-label">Ghi chú ban đầu (tuỳ chọn)</div>
                  <textarea className="textarea" rows={3} style={{resize:'none',minHeight:64}} placeholder="VD: Khách mới biết đến qua TikTok, quan tâm sản phẩm cho thể hình tăng cơ..." value={data.notes} onChange={(e)=>update('notes',e.target.value)}/>
                </div>
              </div>
            </div>
          )}
        </div>

        {/* Footer */}
        {!done && (
          <div style={{padding:'12px 28px',background:'var(--bg-soft)',borderTop:'1px solid var(--border-1)',display:'flex',gap:'var(--space-3)',alignItems:'center',flexShrink:0}}>
            <div className="text-xs fg-muted addcust-hint" style={{flex:1,display:'flex',alignItems:'center',gap:6}}>
              <Icon name="gift" size={14}/>
              <span>Hệ thống tự cấp mã thành viên, gửi SMS chào mừng{data.phone ? <> tới <b className="tnum">{data.phone}</b></> : null} và áp voucher giảm 10% cho đơn đầu tiên.</span>
            </div>
            <button className="btn btn-secondary btn-lg" onClick={onClose} disabled={saving}>Huỷ</button>
            <button className="btn btn-cta btn-lg" disabled={saving || !canNext}
              title={canNext ? undefined : 'Điền đủ Họ tên + SĐT hợp lệ và chọn loại khách'}
              onClick={save}>
              {saving ? <><LoadingSpinner size={14}/>Đang lưu...</> : <><Icon name="check" size={14}/>Tạo khách hàng</>}
            </button>
          </div>
        )}
      </div>
    </div>
  );
}

// ---------- ADD PARTNER WIZARD ----------
function AddPartnerWizard({ onClose, onSave }) {
  const [step, setStep] = useState(1);
  const [data, setData] = useState({
    name:'', type:'tiktok_affiliate',
    contactName:'', contactPhone:'', contactEmail:'', city:'TP.HCM',
    followers:'', socialHandle:'',
    legal:{ businessLicense:false, taxCode:'', nda:false },
    priceList:'Affiliate KOC', commission:12,
    onboardingSteps:['intro_call','send_samples','content_brief'],
    notes:'',
  });
  const [saving, setSaving] = useState(false);
  const [done, setDone] = useState(false);

  const update = (k, v) => setData(d => ({...d, [k]: v}));
  const updateLegal = (k, v) => setData(d => ({...d, legal: {...d.legal, [k]: v}}));

  // Nhãn hiển thị TRÙNG với nhãn được lưu (app.jsx typeLabels) — chọn gì lưu nấy
  const partnerTypes = [
    {k:'tiktok_affiliate', l:'TikTok Affiliate',          ic:'sparkles'},
    {k:'pharmacy',         l:'Nhà thuốc',                  ic:'pill'},
    {k:'wholesale',        l:'Đại lý / Phân phối',         ic:'truck'},
    {k:'gym',              l:'Phòng gym',                  ic:'flame'},
    {k:'pt',               l:'PT / HLV',                   ic:'award'},
    {k:'spa',              l:'Spa & Nutritionist',         ic:'heart'},
    {k:'enterprise',       l:'Doanh nghiệp (quà tặng NV)', ic:'briefcase'},
  ];
  const isAffiliate = data.type === 'tiktok_affiliate' || data.type === 'pt';

  const canNext = (() => {
    if (step === 1) return data.name.trim() && data.type;
    if (step === 2) return data.contactName.trim() && __phoneValid(data.contactPhone);
    return true;
  })();

  // Huỷ giữa chừng thì không tạo đối tác nữa — dọn timeout khi unmount
  const saveTimers = useRef([]);
  useEffect(() => () => saveTimers.current.forEach(clearTimeout), []);
  const save = () => {
    setSaving(true);
    saveTimers.current.push(setTimeout(() => {
      setSaving(false); setDone(true);
      saveTimers.current.push(setTimeout(() => onSave && onSave(data), 1200));
    }, 800));
  };

  return (
    // Không đóng khi bấm nền tối — wizard 5 bước, tránh mất dữ liệu đã nhập
    <div className="drawer-overlay" style={{justifyContent:'center',alignItems:'center'}}>
      <div onClick={(e) => e.stopPropagation()}
        style={{background:'var(--bg-page)',width:'min(720px, 95vw)',maxHeight:'92vh',display:'flex',flexDirection:'column',borderRadius:'var(--radius-lg)',overflow:'hidden',boxShadow:'var(--shadow-pop)',animation:'slidein 0.28s var(--ease-out)'}}>

        {/* Header */}
        <div style={{padding:'var(--space-5) var(--space-6)',background:'var(--vs-dark-blue)',color:'#fff'}}>
          <div className="row">
            <div style={{flex:1}}>
              <div className="eyebrow" style={{color:'var(--vs-light-blue)'}}>Thêm đối tác B2B</div>
              <h2 style={{margin:'4px 0 0',fontFamily:'var(--font-display)',fontSize:22,fontWeight:700,color:'#fff'}}>
                {done ? 'Đã tạo đối tác!' : ['Loại đối tác','Liên hệ chính','Pháp lý','Bảng giá & Hoa hồng','Onboarding'][step-1]}
              </h2>
            </div>
            <button onClick={onClose} style={{background:'rgba(255,255,255,0.18)',border:'none',color:'#fff',width:36,height:36,borderRadius:'50%',cursor:'pointer',display:'inline-flex',alignItems:'center',justifyContent:'center'}}>
              <Icon name="close" size={16}/>
            </button>
          </div>

          {!done && (
            <div className="row mt-4" style={{gap:6}}>
              {[1,2,3,4,5].map(n => (
                <div key={n} style={{flex:1,height:4,borderRadius:2,background: step >= n ? 'var(--vs-light-blue)' : 'rgba(255,255,255,0.18)',transition:'all 0.2s'}}/>
              ))}
            </div>
          )}
        </div>

        {/* Body */}
        <div style={{padding:'var(--space-5) var(--space-6)',overflow:'auto',flex:1}}>
          {done ? (
            <div style={{textAlign:'center',padding:'var(--space-8) 0'}}>
              <div style={{width:80,height:80,borderRadius:'50%',background:'var(--status-success)',color:'#fff',display:'inline-flex',alignItems:'center',justifyContent:'center',marginBottom:'var(--space-4)'}}>
                <Icon name="check" size={40} stroke={3}/>
              </div>
              <h3 style={{fontFamily:'var(--font-display)',fontSize:24,fontWeight:700,color:'var(--fg-1)',margin:0}}>Đã tạo đối tác {data.name}</h3>
              <p className="text-sm fg-muted mt-2">
                Stage: <b>Onboarding</b> · {data.onboardingSteps.length} bước onboarding đã chọn · Đang mở danh sách đối tác...
              </p>
            </div>
          ) : step === 1 ? (
            <>
              <div className="field-label">Tên đối tác / KOC <span style={{color:'var(--status-sale)'}}>*</span></div>
              <input className="input mb-4" autoFocus placeholder={isAffiliate ? 'VD: KOC Mai Linh Beauty' : 'VD: Nhà thuốc Long Châu Q.3'} value={data.name} onChange={(e)=>update('name',e.target.value)}/>

              <div className="field-label">Loại đối tác <span style={{color:'var(--status-sale)'}}>*</span></div>
              <div className="grid grid-2" style={{gap:8}}>
                {partnerTypes.map(t => (
                  <button key={t.k}
                    className="card"
                    onClick={() => update('type', t.k)}
                    style={{
                      padding:'var(--space-3) var(--space-4)',
                      cursor:'pointer',
                      border: data.type===t.k ? '2px solid var(--vs-light-blue)' : '1px solid var(--border-1)',
                      background: data.type===t.k ? 'rgba(65,182,230,0.06)' : 'var(--bg-page)',
                      display:'flex',alignItems:'center',gap:12,textAlign:'left',
                    }}>
                    <div style={{width:36,height:36,background: data.type===t.k ? 'var(--vs-light-blue)' : 'var(--bg-soft)',color: data.type===t.k ? 'var(--vs-dark-blue)' : 'var(--vs-light-blue)',borderRadius:'var(--radius-md)',display:'flex',alignItems:'center',justifyContent:'center',flexShrink:0}}>
                      <Icon name={t.ic} size={18}/>
                    </div>
                    <div style={{fontWeight: data.type===t.k ? 700 : 500,color:'var(--fg-1)',fontSize:14}}>{t.l}</div>
                    {data.type===t.k && <Icon name="check" size={16} style={{color:'var(--vs-light-blue)',marginLeft:'auto'}} stroke={3}/>}
                  </button>
                ))}
              </div>
            </>
          ) : step === 2 ? (
            <>
              <div className="grid grid-2 mb-3">
                <div>
                  <div className="field-label">Tên người liên hệ <span style={{color:'var(--status-sale)'}}>*</span></div>
                  <input className="input" placeholder="Ngô Thị Mai Linh" value={data.contactName} onChange={(e)=>update('contactName',e.target.value)}/>
                </div>
                <div>
                  <div className="field-label">Số điện thoại <span style={{color:'var(--status-sale)'}}>*</span></div>
                  <input className="input tnum" placeholder="0903 778 991" value={data.contactPhone} onChange={(e)=>update('contactPhone',e.target.value)}/>
                </div>
              </div>
              <div className="field-label">Email</div>
              <input className="input mb-3" placeholder="contact@partner.com" value={data.contactEmail} onChange={(e)=>update('contactEmail',e.target.value)}/>
              <div className="field-label">Thành phố</div>
              <select className="select mb-3" value={data.city} onChange={(e)=>update('city',e.target.value)}>
                {['TP.HCM','Hà Nội','Đà Nẵng','Hải Phòng','Cần Thơ','Khác'].map(c => <option key={c}>{c}</option>)}
              </select>
              {isAffiliate && (
                <>
                  <div className="grid grid-2">
                    <div>
                      <div className="field-label">Followers (TikTok / IG)</div>
                      <input className="input tnum" placeholder="385K" value={data.followers} onChange={(e)=>update('followers',e.target.value)}/>
                    </div>
                    <div>
                      <div className="field-label">Social handle</div>
                      <input className="input" placeholder="@mailinhbeauty" value={data.socialHandle} onChange={(e)=>update('socialHandle',e.target.value)}/>
                    </div>
                  </div>
                </>
              )}
            </>
          ) : step === 3 ? (
            <>
              <div className="text-sm fg-muted mb-4">Đính kèm giấy tờ pháp lý — có thể bổ sung sau, nhưng đối tác sẽ ở stage <b>Onboarding</b> cho đến khi đủ.</div>
              <div className="grid grid-2 mb-3">
                <button onClick={() => updateLegal('businessLicense', !data.legal.businessLicense)}
                  className="card" style={{padding:'var(--space-4)',cursor:'pointer',border: data.legal.businessLicense?'2px solid var(--status-success)':'1px dashed var(--border-1)',background: data.legal.businessLicense?'rgba(6,167,125,0.06)':'var(--bg-page)',textAlign:'center'}}>
                  <Icon name={data.legal.businessLicense?'check':'plus'} size={24} style={{color: data.legal.businessLicense?'var(--status-success)':'var(--fg-muted)',margin:'0 auto var(--space-2)'}}/>
                  <div className="bold fg-1">Giấy ĐKKD</div>
                  <div className="text-xs fg-muted mt-1">{data.legal.businessLicense ? 'Đã upload' : 'Click để upload PDF'}</div>
                </button>
                <button onClick={() => updateLegal('nda', !data.legal.nda)}
                  className="card" style={{padding:'var(--space-4)',cursor:'pointer',border: data.legal.nda?'2px solid var(--status-success)':'1px dashed var(--border-1)',background: data.legal.nda?'rgba(6,167,125,0.06)':'var(--bg-page)',textAlign:'center'}}>
                  <Icon name={data.legal.nda?'check':'plus'} size={24} style={{color: data.legal.nda?'var(--status-success)':'var(--fg-muted)',margin:'0 auto var(--space-2)'}}/>
                  <div className="bold fg-1">NDA cộng tác</div>
                  <div className="text-xs fg-muted mt-1">{data.legal.nda ? 'Đã ký' : 'Click để gửi e-sign'}</div>
                </button>
              </div>
              <div className="field-label">Mã số thuế</div>
              <input className="input tnum" placeholder="0312345678" value={data.legal.taxCode} onChange={(e)=>updateLegal('taxCode',e.target.value)}/>
            </>
          ) : step === 4 ? (
            <>
              <div className="field-label">Bảng giá áp dụng</div>
              <div className="row gap-1 mb-4" style={{flexWrap:'wrap'}}>
                {['Affiliate KOC','Pharmacy Chain','Wholesale Tier 1','Gym & PT','Spa & Clinic','Enterprise B2B'].map(p => (
                  <button key={p}
                    className={data.priceList===p ? 'btn btn-cta btn-sm' : 'btn btn-secondary btn-sm'}
                    onClick={() => update('priceList', p)}>
                    {p}
                  </button>
                ))}
              </div>

              <div className="field-label">% Hoa hồng / Chiết khấu</div>
              <div className="row gap-3" style={{alignItems:'center'}}>
                <input type="range" min="5" max="35" step="1" value={data.commission} onChange={(e)=>update('commission', +e.target.value)}
                  style={{flex:1,accentColor:'var(--vs-light-blue)'}}/>
                <div style={{minWidth:80,textAlign:'right'}}>
                  <span className="tnum bold" style={{fontSize:24,fontFamily:'var(--font-display)',color:'var(--vs-dark-blue)'}}>{data.commission}%</span>
                </div>
              </div>
              <div className="text-xs fg-muted mt-2">Range thường: 5-15% cho phân phối · 12-20% cho KOC · 18-30% cho enterprise</div>

              <div className="banner mt-4">
                <Icon name="zap" size={16}/>
                <div className="text-sm" style={{flex:1}}>
                  Sau khi tạo, hệ thống sẽ generate <b>tracking link riêng</b> và <b>promo code</b> cho đối tác này — dùng để đo conversion.
                </div>
              </div>
            </>
          ) : (
            <>
              <div className="text-sm fg-muted mb-4">Chọn các bước onboarding sẽ tự tạo task cho Account Manager:</div>
              {[
                {k:'intro_call',   l:'Cuộc gọi giới thiệu chương trình',           ic:'phone',  due:'Trong 3 ngày'},
                {k:'send_samples', l:'Gửi sample sản phẩm',                         ic:'package',due:'Trong 7 ngày'},
                {k:'content_brief',l:'Gửi content brief + key message',             ic:'fileText',due:'Trong 7 ngày'},
                {k:'first_payment',l:'Setup thanh toán hoa hồng',                   ic:'receipt',due:'Trong 14 ngày'},
                {k:'store_visit',  l:'Visit cửa hàng / showroom đối tác (nếu có)',  ic:'pin',    due:'Trong 30 ngày'},
                {k:'first_report', l:'Báo cáo kết quả 30 ngày đầu',                 ic:'chart',  due:'Sau 30 ngày'},
              ].map(s => (
                <label key={s.k} className="row mb-2" style={{cursor:'pointer',padding:'10px 14px',background: data.onboardingSteps.includes(s.k) ? 'rgba(65,182,230,0.06)' : 'var(--bg-soft)',border:`1px solid ${data.onboardingSteps.includes(s.k) ? 'rgba(65,182,230,0.30)' : 'var(--border-1)'}`,borderRadius:'var(--radius-md)'}}>
                  <input type="checkbox" checked={data.onboardingSteps.includes(s.k)}
                    onChange={() => update('onboardingSteps', data.onboardingSteps.includes(s.k) ? data.onboardingSteps.filter(x => x !== s.k) : [...data.onboardingSteps, s.k])}
                    style={{accentColor:'var(--vs-light-blue)',width:18,height:18}}/>
                  <Icon name={s.ic} size={16} style={{color:'var(--vs-light-blue)',marginLeft:8}}/>
                  <div style={{flex:1,marginLeft:8}}>
                    <div className="strong fg-1 text-sm">{s.l}</div>
                    <div className="text-xs fg-muted">{s.due}</div>
                  </div>
                </label>
              ))}

              <div className="mt-4">
                <div className="field-label">Ghi chú nội bộ (tuỳ chọn)</div>
                <textarea className="textarea" placeholder="VD: Cần ưu tiên brief sản phẩm Sports Nutrition cho KOC này..." value={data.notes} onChange={(e)=>update('notes',e.target.value)}/>
              </div>
            </>
          )}
        </div>

        {/* Footer */}
        {!done && (
          <div style={{padding:'var(--space-4) var(--space-6)',background:'var(--bg-soft)',borderTop:'1px solid var(--border-1)',display:'flex',gap:'var(--space-3)',alignItems:'center'}}>
            <span className="text-xs fg-muted">Bước {step}/5</span>
            <div style={{flex:1}}/>
            {step > 1 && <button className="btn btn-secondary" onClick={() => setStep(step - 1)}><Icon name="arrowleft" size={14}/>Quay lại</button>}
            {step < 5 ? (
              <button className="btn btn-cta" disabled={!canNext} onClick={() => setStep(step + 1)}>
                Tiếp tục<Icon name="arrowright" size={14}/>
              </button>
            ) : (
              <button className="btn btn-cta btn-lg" disabled={saving} onClick={save}>
                {saving ? <><LoadingSpinner size={14}/>Đang tạo...</> : <><Icon name="check" size={14}/>Tạo đối tác</>}
              </button>
            )}
          </div>
        )}
      </div>
    </div>
  );
}

Object.assign(window, { AddCustomerModal, AddPartnerWizard });
