import type {PhaseMetrics} from './softInputRuntime';

const EASINGS = ['linear', 'easeIn', 'easeOut', 'easeInOut', 'bounce'];
const TOL = 5;

export function judgeEasingMatrix(m: Record<string, PhaseMetrics>): Array<[string, boolean]> {
  const sampled = EASINGS.every(k => m[k] !== undefined && m[k].quarterRatio >= 0 && m[k].midRatio >= 0 && m[k].last > 0);
  if (!sampled) return [['五轮均完成上移动画并采到进度', false]];
  const lin = m.linear;
  const q = (k: string): number => m[k].quarterRatio;
  const mid = (k: string): number => m[k].midRatio;
  return [
    ['五轮均完成上移动画并采到进度', true],
    ['easeIn 四分位与中点均比 linear 低 5 个百分点以上', q('easeIn') < lin.quarterRatio - TOL && mid('easeIn') < lin.midRatio - TOL],
    ['easeOut 四分位与中点均比 linear 高 5 个百分点以上', q('easeOut') > lin.quarterRatio + TOL && mid('easeOut') > lin.midRatio + TOL],
    ['easeInOut 四分位比 linear 低 5 个百分点以上且中点与 linear 相差 ≤5', q('easeInOut') < lin.quarterRatio - TOL && Math.abs(mid('easeInOut') - lin.midRatio) <= TOL],
    ['bounce 兜底 linear:两项与 linear 相差 ≤5', Math.abs(q('bounce') - lin.quarterRatio) <= TOL && Math.abs(mid('bounce') - lin.midRatio) <= TOL],
  ];
}