import bot from '@bot'
import prisma from '@prisma'
import cron from 'node-cron'
import { clearVacancyCache } from '../scraper.js'
import { buildFiltersKeyboard, buildSettingsKeyboard, escapeHtml } from '../ui.js'
import { getState } from '../state.js'

export async function handleSearchModeToggle(chatId: number): Promise<void> {
  const settings = await prisma.settings.findUnique({ where: { telegramId: chatId } })
  const current = settings?.searchMode ?? 'text'
  const next = current === 'text' ? 'resume' : 'text'
  await prisma.settings.update({ where: { telegramId: chatId }, data: { searchMode: next } })
  clearVacancyCache(chatId)

  const text = next === 'resume'
    ? `✅ <b>Поиск по резюме включён</b>\n\n• Есть ключевые слова → <code>?text=...&resume=...</code>\n• Ключевые слова пусты → только <code>?resume=...</code>`
    : `⛔ <b>Поиск по резюме выключен</b>\n\n• Всегда ищет по ключевым словам → <code>?text=...</code>`
  await bot.sendMessage(chatId, text, { parse_mode: 'HTML', reply_markup: await buildFiltersKeyboard(chatId) })
}

export async function handleQuery(chatId: number): Promise<void> {
  const state = getState(chatId)
  state.awaitingQuery = true
  const settings = await prisma.settings.findFirst({ where: { telegramId: chatId } })
  const currentQuery = settings?.searchQuery || '--'
  const msg = await bot.sendMessage(
    chatId,
    `🔍 Текущий запрос: <b>${escapeHtml(currentQuery)}</b>\n\nВведи новый или оставь текущий:`,
    {
      parse_mode: 'HTML',
      reply_markup: {
        inline_keyboard: [[
          { text: `✅ Оставить «${currentQuery}»`, callback_data: 'hh_keep_query' },
          { text: '🗑 Очистить запрос', callback_data: 'hh_clear_query' },
        ]],
      },
    },
  )
  state.queryPromptMessageId = msg.message_id
}

export async function handleMax(chatId: number): Promise<void> {
  const state = getState(chatId)
  state.awaitingMax = true
  const settings = await prisma.settings.findFirst({ where: { telegramId: chatId } })
  const currentMax = settings?.maxApplies ?? '--'
  const msg = await bot.sendMessage(
    chatId,
    `🔢 Текущее значение: <b>${currentMax}</b>\n\nВведи новое количество откликов (1–50) или оставь текущее:`,
    {
      parse_mode: 'HTML',
      reply_markup: {
        inline_keyboard: [[
          { text: `✅ Оставить ${currentMax}`, callback_data: 'hh_keep_max' },
        ]],
      },
    },
  )
  state.maxPromptMessageId = msg.message_id
}

export const DEFAULT_PROMPT = 'Ты — помощник по написанию сопроводительных писем. Отвечай только текстом самого письма, без вступлений, ремарок и пояснений. Опирайся на резюме и ничего не выдумывай, чего недостаточно в резюме лучше умолчать. Пиши по короче и простыми словами. В конце письма оставляй все контакты для связи.'

export async function handlePrompt(chatId: number): Promise<void> {
  const state = getState(chatId)
  state.awaitingPrompt = true
  const user = await prisma.user.findUnique({ where: { telegramId: chatId } })
  const currentPrompt = user?.prompt
  const text = currentPrompt
    ? `📝 Текущий промт:\n<pre>${escapeHtml(currentPrompt)}</pre>\n\nВведи новый или оставь текущий:`
    : '📝 Введи промт для AI (пока не задан):'
  const buttons: { text: string; callback_data: string }[] = []
  if (currentPrompt) {
    buttons.push({ text: '✅ Оставить текущий', callback_data: 'hh_keep_prompt' })
    if (currentPrompt !== DEFAULT_PROMPT)
      buttons.push({ text: '🔄 Вернуть дефолтный', callback_data: 'hh_reset_prompt' })
  }
  const msg = await bot.sendMessage(chatId, text, {
    parse_mode: 'HTML',
    reply_markup: { inline_keyboard: buttons.length ? [buttons] : [] },
  })
  state.promptPromptMessageId = msg.message_id
}

export async function handleExclusions(chatId: number): Promise<void> {
  const state = getState(chatId)
  state.awaitingExclusions = true
  const settings = await prisma.settings.findFirst({ where: { telegramId: chatId } })
  const current = settings?.excludedWords ?? ''
  const text = current
    ? `🚫 Текущие слова исключения: <b>${escapeHtml(current)}</b>\n\nВведи новые через запятую или очисти:`
    : '🚫 Введи слова исключения через запятую (например: <code>senior, lead, архитектор</code>)\n\nПустое сообщение — убрать все исключения:'
  const buttons: { text: string; callback_data: string }[] = []
  if (current) {
    buttons.push({ text: '✅ Оставить текущие', callback_data: 'hh_keep_exclusions' })
    buttons.push({ text: '🗑 Очистить', callback_data: 'hh_clear_exclusions' })
  }
  const msg = await bot.sendMessage(chatId, text, {
    parse_mode: 'HTML',
    reply_markup: { inline_keyboard: buttons.length ? [buttons] : [] },
  })
  state.exclusionPromptMessageId = msg.message_id
}

export async function handleAutoToggle(chatId: number): Promise<void> {
  const state = getState(chatId)
  if (state.autoCron) {
    state.autoCron.stop()
    state.autoCron = null
    await bot.sendMessage(chatId, '⛔ Авто остановлен', { reply_markup: await buildSettingsKeyboard(chatId) })
  }
  else {
    state.autoCron = cron.schedule('0 10 * * 1-5', async () => {
      await bot.sendMessage(chatId, '⏰ Авто-отклик...')
    })
    await bot.sendMessage(chatId, '✅ Авто включён (пн-пт, 10:00)', { reply_markup: await buildSettingsKeyboard(chatId) })
  }
}
