/*
 * 비밀번호 강도 힌트 — 로컬 평가(길이 + 문자군). 백엔드 정책과 별개의 UX 보조.
 * design.md 토큰: level별 색상은 login.css의 .kx-pw-* 클래스가 소유.
 */
export type PasswordStrength = 'empty' | 'weak' | 'fair' | 'strong';

export interface PasswordHint {
  level: PasswordStrength;
  /** 0..3 채워진 막대 수 */
  score: number;
  label: string;
}

export function evaluatePassword(pw: string): PasswordHint {
  if (!pw) return { level: 'empty', score: 0, label: '' };

  let classes = 0;
  if (/[a-z]/.test(pw)) classes += 1;
  if (/[A-Z]/.test(pw)) classes += 1;
  if (/[0-9]/.test(pw)) classes += 1;
  if (/[^A-Za-z0-9]/.test(pw)) classes += 1;

  const longEnough = pw.length >= 8;
  const veryLong = pw.length >= 12;

  if (!longEnough || classes <= 1) {
    return { level: 'weak', score: 1, label: '약함 · 8자 이상 + 영문·숫자·기호 조합 권장' };
  }
  if (classes >= 3 && veryLong) {
    return { level: 'strong', score: 3, label: '강함 · 안전한 비밀번호입니다' };
  }
  return { level: 'fair', score: 2, label: '보통 · 12자 이상이면 더 안전합니다' };
}
