const axios = require('axios');
const cheerio = require('cheerio');
const CINECHECK_BASE = 'https://www.cinecheck.be';

async function searchMovies(query) {
  const url = `${CINECHECK_BASE}/umbraco/surface/searchresults/search?query=${encodeURIComponent(query)}&producties=0&amount=5`;
  const res = await axios.get(url, {
    headers: {
      'x-umb-culture': 'fr-BE',
      'x-umb-key': '0a0c11a9-ece8-4dc8-8578-e5aab235d9ff',
      'x-requested-with': 'XMLHttpRequest',
      'User-Agent': 'Mozilla/5.0',
    }
  });
  const $ = cheerio.load(res.data);
  const results = [];
  $('.c-search__result').each((_, el) => {
    const title = $(el).find('.c-search__title').text().trim().replace(/\s*\(.+?\)\s*$/, '');
    const yearMatch = $(el).find('.c-search__title').text().match(/\((\d{4})\)/);
    const year = yearMatch ? yearMatch[1] : null;
    const imgSrc = $(el).find('img.c-search__image').attr('src')
      ? CINECHECK_BASE + $(el).find('img.c-search__image').attr('src')
      : null;
    const link = $(el).find('a.c-search__hiddenlink').attr('href')
      ? CINECHECK_BASE + $(el).find('a.c-search__hiddenlink').attr('href')
      : null;
    if (title && link) {
      results.push({ title, year, img: imgSrc, link });
    }
  });
  return results;
}

async function getMovieClassification(movieUrl) {
  const res = await axios.get(movieUrl, { headers: { 'User-Agent': 'Mozilla/5.0' } });
  const $ = cheerio.load(res.data);

  const year = $('.c-movie__details .c-movie__label').first().text().trim() || null;
  const genres = $('.c-movie__details .c-movie__label').eq(1).text().split(',').map(s => s.trim());
  const img = $('.c-movie__cover img').attr('src')
    ? CINECHECK_BASE + $('.c-movie__cover img').attr('src')
    : null;
  const marks = [];
  $('.c-header__marks .c-header__mark').each((_, el) => {
    const label = $(el).find('span.vh').text().trim();
    if (label) marks.push(label);
  });
    const normalizedMarks = marks.map(m => {
      // Extract first number found, else null
      const n = parseInt((m + '').replace(/\D/g, ''), 10);
      return isNaN(n) ? null : n;
    }).filter(x => x !== null);
  const details = [];
  $('.c-classificatie__item').each((_, el) => {
    const type = $(el).find('svg use').first().attr('xlink:href') || '';
    const typeName = type.split('#')[1] || '';
    const description = $(el).find('.js-classificatie-text').text().trim();
    if (typeName && description) {
      details.push({ type: typeName, description });
    }
  });
  const summary = $('.c-movie__introtext p').first().text().trim();

  return {
    year,
    genres,
    img,
    marks,
    normalizedMarks,
    details,
    summary
  };
}

async function searchAndEnrich(query) {
  const results = await searchMovies(query);
  return await Promise.all(results.map(async m => ({
    title: m.title,
    year: m.year,
    img: m.img,
    link: m.link,
    source: 'cinecheck',
    ...(await getMovieClassification(m.link))
  })));
}

module.exports = { searchAndEnrich };