{"version":3,"file":"user-reviews.helper.cjs","names":["parseIdFromUrl","parseFilmType","parseColor","parseDate"],"sources":["../../src/helpers/user-reviews.helper.ts"],"sourcesContent":["import { HTMLElement } from 'node-html-parser';\nimport { CSFDColorRating, CSFDFilmTypes, CSFDStars } from '../dto/global';\nimport { CSFDColors } from '../dto/user-ratings';\nimport { parseColor, parseDate, parseFilmType, parseIdFromUrl } from './global.helper';\n\nexport const getUserReviewId = (el: HTMLElement): number => {\n  const url = el.querySelector('.film-title-name').attributes.href;\n  return parseIdFromUrl(url);\n};\n\nexport const getUserReviewRating = (el: HTMLElement): CSFDStars => {\n  const ratingText = el.querySelector('.star-rating .stars').classNames.split(' ').pop();\n\n  const rating = ratingText.includes('stars-') ? +ratingText.split('-').pop() : 0;\n  return rating as CSFDStars;\n};\n\nexport const getUserReviewType = (el: HTMLElement): CSFDFilmTypes => {\n  // Type can be in the second .info span (e.g., \"(seriál)\") // TODO need more tests\n  const typeNode = el.querySelector('.film-title-info .info ~ .info');\n  return parseFilmType(typeNode ? typeNode.text.slice(1, -1) : 'film');\n};\n\nexport const getUserReviewTitle = (el: HTMLElement): string => {\n  return el.querySelector('.film-title-name').text;\n};\n\nexport const getUserReviewYear = (el: HTMLElement): number | null => {\n  const infoSpan = el.querySelector('.film-title-info .info');\n  return infoSpan ? +infoSpan.text.replace(/[()]/g, '') || null : null;\n};\n\nexport const getUserReviewColorRating = (el: HTMLElement): CSFDColorRating => {\n  const icon = el.querySelector('.film-title-inline i.icon');\n  const color = parseColor(icon?.classNames.split(' ').pop() as CSFDColors);\n  return color;\n};\n\nexport const getUserReviewDate = (el: HTMLElement): string | null => {\n  const dateRaw = el.querySelector('.article-header-date-content .info time').text.trim();\n  return parseDate(dateRaw);\n};\n\nexport const getUserReviewUrl = (el: HTMLElement): string => {\n  const url = el.querySelector('.film-title-name').attributes.href;\n  return `https://www.csfd.cz${url}`;\n};\n\nexport const getUserReviewText = (el: HTMLElement): string => {\n  return el.querySelector('.comment').text.trim();\n};\n\nexport const getUserReviewPoster = (el: HTMLElement): string => {\n  const img = el.querySelector('.article-img img');\n  const srcset = img?.attributes.srcset;\n\n  if (srcset) {\n    // Extract 3x version from srcset (e.g., \"url 1x, url 2x, url 3x\")\n    const srcsetParts = srcset.split(',').map((s) => s.trim());\n    const poster3x = srcsetParts.find((s) => s.endsWith('3x'));\n    if (poster3x) {\n      const url = poster3x.replace(/\\s+3x$/, '').trim();\n      return `https:${url}`;\n    }\n  }\n\n  // Fallback to src if srcset not available\n  const src = img?.attributes.src;\n  return src ? `https:${src}` : null;\n};\n"],"mappings":";;AAKA,MAAa,mBAAmB,OAA4B;CAC1D,MAAM,MAAM,GAAG,cAAc,kBAAkB,CAAC,CAAC,WAAW;CAC5D,OAAOA,sBAAAA,eAAe,GAAG;AAC3B;AAEA,MAAa,uBAAuB,OAA+B;CACjE,MAAM,aAAa,GAAG,cAAc,qBAAqB,CAAC,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,IAAI;CAGrF,OADe,WAAW,SAAS,QAAQ,IAAI,CAAC,WAAW,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI;AAEhF;AAEA,MAAa,qBAAqB,OAAmC;CAEnE,MAAM,WAAW,GAAG,cAAc,gCAAgC;CAClE,OAAOC,sBAAAA,cAAc,WAAW,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,MAAM;AACrE;AAEA,MAAa,sBAAsB,OAA4B;CAC7D,OAAO,GAAG,cAAc,kBAAkB,CAAC,CAAC;AAC9C;AAEA,MAAa,qBAAqB,OAAmC;CACnE,MAAM,WAAW,GAAG,cAAc,wBAAwB;CAC1D,OAAO,WAAW,CAAC,SAAS,KAAK,QAAQ,SAAS,EAAE,KAAK,OAAO;AAClE;AAEA,MAAa,4BAA4B,OAAqC;CAG5E,OADcC,sBAAAA,WADD,GAAG,cAAc,2BACF,CAAC,EAAE,WAAW,MAAM,GAAG,CAAC,CAAC,IAAI,CAC9C;AACb;AAEA,MAAa,qBAAqB,OAAmC;CAEnE,OAAOC,sBAAAA,UADS,GAAG,cAAc,yCAAyC,CAAC,CAAC,KAAK,KAC1D,CAAC;AAC1B;AAEA,MAAa,oBAAoB,OAA4B;CAE3D,OAAO,sBADK,GAAG,cAAc,kBAAkB,CAAC,CAAC,WAAW;AAE9D;AAEA,MAAa,qBAAqB,OAA4B;CAC5D,OAAO,GAAG,cAAc,UAAU,CAAC,CAAC,KAAK,KAAK;AAChD;AAEA,MAAa,uBAAuB,OAA4B;CAC9D,MAAM,MAAM,GAAG,cAAc,kBAAkB;CAC/C,MAAM,SAAS,KAAK,WAAW;CAE/B,IAAI,QAAQ;EAGV,MAAM,WADc,OAAO,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAC7B,CAAC,CAAC,MAAM,MAAM,EAAE,SAAS,IAAI,CAAC;EACzD,IAAI,UAEF,OAAO,SADK,SAAS,QAAQ,UAAU,EAAE,CAAC,CAAC,KACzB;CAEtB;CAGA,MAAM,MAAM,KAAK,WAAW;CAC5B,OAAO,MAAM,SAAS,QAAQ;AAChC"}