export type RouteMode = 'external' | 'local-singbox';

export interface ApplyReadinessInput {
  routeMode: RouteMode;
  appCount: number;
  proxiFyreInstalled: boolean;
  singBoxInstalled: boolean;
  selectedServerTag?: string;
  externalProxyValue: string;
  externalProxyError?: string | null;
  busy: boolean;
}

export interface ApplyReadiness {
  ready: boolean;
  title?: string;
  text?: string;
}

export function getApplyReadiness(input: ApplyReadinessInput): ApplyReadiness {
  if (input.busy) {
    return {
      ready: false,
      title: 'Операция уже выполняется',
      text: 'Дождись завершения текущего действия перед повторным применением.',
    };
  }

  if (!input.proxiFyreInstalled) {
    return {
      ready: false,
      title: 'ProxiFyre не установлен',
      text: 'Установи ProxiFyre, чтобы маршрутизировать выбранные приложения.',
    };
  }

  if (input.appCount < 1) {
    return {
      ready: false,
      title: 'Нет приложений',
      text: 'Добавь хотя бы один процесс, EXE-файл или папку.',
    };
  }

  if (input.routeMode === 'external') {
    if (!input.externalProxyValue.trim()) {
      return {
        ready: false,
        title: 'Прокси не указан',
        text: 'Введи адрес SOCKS5 прокси в формате host:port или socks5://host:port.',
      };
    }

    if (input.externalProxyError) {
      return {
        ready: false,
        title: 'Проверь формат прокси',
        text: input.externalProxyError,
      };
    }
  }

  if (input.routeMode === 'local-singbox') {
    if (!input.singBoxInstalled) {
      return {
        ready: false,
        title: 'Local sing-box не установлен',
        text: 'Установи Local sing-box, чтобы применить локальный маршрут.',
      };
    }

    if (!input.selectedServerTag) {
      return {
        ready: false,
        title: 'Сервер не выбран',
        text: 'Выбери сервер Local sing-box перед применением маршрута.',
      };
    }
  }

  return { ready: true };
}

