{% set stopoverMedias = stopoversMedias|default(stopoverMedias|default([])) %}{% set shipMediasPool = shipMedias|default([]) %}{% set allMediasPool = [] %}{% if allMedias is defined and allMedias is iterable %}{% if allMedias.ship is defined or allMedias.stopovers is defined or allMedias.cabinTypes is defined %}{% set allMediasPool = allMediasPool|merge(allMedias.ship|default([]))|merge(allMedias.stopovers|default([]))|merge(allMedias.cabinTypes|default([]))%}{% else %}{% set allMediasPool = allMedias %}{% endif %}{% endif %}{# Pools simplifiés : on exclut uniquement les médias de type lien #}{% set stopoverPool = [] %}{% for media in stopoverMedias %}{% if media.extension|default('')|lower != 'link' and (media.cdnUrl is not empty or media.url is not empty) %}{% set stopoverPool = stopoverPool|merge([media]) %}{% endif %}{% endfor %}{% set shipPool = [] %}{% for media in shipMediasPool %}{% if media.extension|default('')|lower != 'link' and (media.cdnUrl is not empty or media.url is not empty) %}{% set shipPool = shipPool|merge([media]) %}{% endif %}{% endfor %}{% set allPool = [] %}{% for media in allMediasPool %}{% if media.extension|default('')|lower != 'link' and (media.cdnUrl is not empty or media.url is not empty) %}{% set allPool = allPool|merge([media]) %}{% endif %}{% endfor %}{% set usedMediaKeys = [] %}{% set selectedImages = [] %}{# 1) Stopover aléatoire #}{% if stopoverPool is not empty %}{% set firstImage = (stopoverPool|shuffle)|first %}{% set firstImageKey = firstImage.id|default(firstImage.cdnUrl|default(firstImage.url|default(''))) %}{% set selectedImages = selectedImages|merge([{ media: firstImage, category: 'stopovers' }]) %}{% set usedMediaKeys = usedMediaKeys|merge([firstImageKey]) %}{% endif %}{# 2) Ship tag main -> ship aléatoire -> allMedias aléatoire (non utilisée) #}{% set shipMainCandidates = [] %}{% for media in shipPool %}{% set hasMainTag = false %}{% for mediaTag in media.tags|default([]) %}{% set tagName = mediaTag.name|default(mediaTag.slug|default(mediaTag|default('')))|lower %}{% if tagName == 'main' %}{% set hasMainTag = true %}{% endif %}{% endfor %}{% if hasMainTag %}{% set shipMainCandidates = shipMainCandidates|merge([media]) %}{% endif %}{% endfor %}{% set shipFallbackCandidates = [] %}{% for media in shipPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set shipFallbackCandidates = shipFallbackCandidates|merge([media]) %}{% endif %}{% endfor %}{% set allFallbackCandidates = [] %}{% for media in allPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set allFallbackCandidates = allFallbackCandidates|merge([media]) %}{% endif %}{% endfor %}{% set secondImage = null %}{% set secondImageCategory = 'ship' %}{% if shipMainCandidates is not empty %}{% set secondImage = (shipMainCandidates|shuffle)|first %}{% elseif shipFallbackCandidates is not empty %}{% set secondImage = (shipFallbackCandidates|shuffle)|first %}{% elseif allFallbackCandidates is not empty %}{% set secondImage = (allFallbackCandidates|shuffle)|first %}{% endif %}{% if secondImage %}{% set secondImageKey = secondImage.id|default(secondImage.cdnUrl|default(secondImage.url|default(''))) %}{% if secondImageKey not in usedMediaKeys %}{% set selectedImages = selectedImages|merge([{ media: secondImage, category: secondImageCategory }]) %}{% set usedMediaKeys = usedMediaKeys|merge([secondImageKey]) %}{% endif %}{% endif %}{# 3) Stopover aléatoire, préférence non utilisée #}{% set stopoverAvailable = [] %}{% for media in stopoverPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set stopoverAvailable = stopoverAvailable|merge([media]) %}{% endif %}{% endfor %}{% set thirdImage = null %}{% if stopoverAvailable is not empty %}{% set thirdImage = (stopoverAvailable|shuffle)|first %}{% elseif stopoverPool is not empty %}{% set thirdImage = (stopoverPool|shuffle)|first %}{% endif %}{% if thirdImage %}{% set thirdImageKey = thirdImage.id|default(thirdImage.cdnUrl|default(thirdImage.url|default(''))) %}{% set selectedImages = selectedImages|merge([{ media: thirdImage, category: 'stopovers' }]) %}{% if thirdImageKey not in usedMediaKeys %}{% set usedMediaKeys = usedMediaKeys|merge([thirdImageKey]) %}{% endif %}{% endif %}{# 4) + 5) Ship tag boarding_life -> ship aléatoire non utilisée -> allMedias aléatoire non utilisée #}{% for i in 1..2 %}{% set shipBoardingCandidates = [] %}{% for media in shipPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set hasBoardingLifeTag = false %}{% for mediaTag in media.tags|default([]) %}{% set tagName = mediaTag.name|default(mediaTag.slug|default(mediaTag|default('')))|lower %}{% if tagName == 'boarding_life' %}{% set hasBoardingLifeTag = true %}{% endif %}{% endfor %}{% if hasBoardingLifeTag %}{% set shipBoardingCandidates = shipBoardingCandidates|merge([media]) %}{% endif %}{% endif %}{% endfor %}{% set shipAnyCandidates = [] %}{% for media in shipPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set shipAnyCandidates = shipAnyCandidates|merge([media]) %}{% endif %}{% endfor %}{% set allAnyCandidates = [] %}{% for media in allPool %}{% set mediaKey = media.id|default(media.cdnUrl|default(media.url|default(''))) %}{% if mediaKey not in usedMediaKeys %}{% set allAnyCandidates = allAnyCandidates|merge([media]) %}{% endif %}{% endfor %}{% set nextImage = null %}{% set nextImageCategory = 'ship' %}{% if shipBoardingCandidates is not empty %}{% set nextImage = (shipBoardingCandidates|shuffle)|first %}{% set nextImageCategory = 'cabin' %}{% elseif shipAnyCandidates is not empty %}{% set nextImage = (shipAnyCandidates|shuffle)|first %}{% elseif allAnyCandidates is not empty %}{% set nextImage = (allAnyCandidates|shuffle)|first %}{% endif %}{% if nextImage %}{% set nextImageKey = nextImage.id|default(nextImage.cdnUrl|default(nextImage.url|default(''))) %}{% if nextImageKey not in usedMediaKeys %}{% set selectedImages = selectedImages|merge([{ media: nextImage, category: nextImageCategory }]) %}{% set usedMediaKeys = usedMediaKeys|merge([nextImageKey]) %}{% endif %}{% endif %}{% endfor %}{% if selectedImages is not empty %}<div class="viewer" id="cruise-viewer" data-total-images="{{ selectedImages|length }}"><div class="viewer-desktop"><div class="viewer-main-image"><imgsrc="{{ selectedImages[0].media.cdnUrl|default(selectedImages[0].media.url|default('')) }}"alt="{{ selectedImages[0].media.title|default(cruise.name|default('Image croisière')) }}"class="main-image"data-gallery-category="{{ selectedImages[0].category }}"data-gallery-src="{{ selectedImages[0].media.cdnUrl|default(selectedImages[0].media.url|default('')) }}"data-gallery-media-id="{{ selectedImages[0].media.id|default('') }}"></div><div class="viewer-thumbnails">{% if selectedImages|length > 1 %}<div class="thumbnail-item" data-index="1"><imgsrc="{{ selectedImages[1].media.cdnUrl|default(selectedImages[1].media.url|default('')) }}"alt="{{ selectedImages[1].media.title|default(cruise.name|default('Image croisière')) }}"data-gallery-category="{{ selectedImages[1].category }}"data-gallery-src="{{ selectedImages[1].media.cdnUrl|default(selectedImages[1].media.url|default('')) }}"data-gallery-media-id="{{ selectedImages[1].media.id|default('') }}"></div>{% endif %}{% if selectedImages|length > 2 %}<div class="thumbnail-item" data-index="2"><imgsrc="{{ selectedImages[2].media.cdnUrl|default(selectedImages[2].media.url|default('')) }}"alt="{{ selectedImages[2].media.title|default(cruise.name|default('Image croisière')) }}"data-gallery-category="{{ selectedImages[2].category }}"data-gallery-src="{{ selectedImages[2].media.cdnUrl|default(selectedImages[2].media.url|default('')) }}"data-gallery-media-id="{{ selectedImages[2].media.id|default('') }}"></div>{% endif %}{% if selectedImages|length > 3 %}<div class="thumbnail-item thumbnail-item-third" data-index="3"><imgsrc="{{ selectedImages[3].media.cdnUrl|default(selectedImages[3].media.url|default('')) }}"alt="{{ selectedImages[3].media.title|default(cruise.name|default('Image croisière')) }}"data-gallery-category="{{ selectedImages[3].category }}"data-gallery-src="{{ selectedImages[3].media.cdnUrl|default(selectedImages[3].media.url|default('')) }}"data-gallery-media-id="{{ selectedImages[3].media.id|default('') }}">{% if selectedImages|length >= 5 %}<div class="button-div button-desktop"><button type="button" id="view-all-photos-btn"><div class="icon-image" data-svg-static>{{ getLucidIcon('grip-vertical') }}</div><div>Voir toutes les photos ({{ totalGalleryImages|default(selectedImages|length) }})</div></button></div>{% endif %}</div>{% endif %}{% if selectedImages|length > 4 %}<div class="thumbnail-item" data-index="4"><imgsrc="{{ selectedImages[4].media.cdnUrl|default(selectedImages[4].media.url|default('')) }}"alt="{{ selectedImages[4].media.title|default(cruise.name|default('Image croisière')) }}"data-gallery-category="{{ selectedImages[4].category }}"data-gallery-src="{{ selectedImages[4].media.cdnUrl|default(selectedImages[4].media.url|default('')) }}"data-gallery-media-id="{{ selectedImages[4].media.id|default('') }}"></div>{% endif %}</div></div><div class="carousel viewer-carousel"><div class="elements">{% for image in selectedImages %}<div class="carousel-image{% if loop.index0 == 0 %} active{% endif %}"><imgsrc="{{ image.media.cdnUrl|default(image.media.url|default('')) }}"alt="{{ image.media.title|default(getCruiseName(cruise)|default('Image croisière')) }}"data-gallery-category="{{ image.category }}"data-gallery-src="{{ image.media.cdnUrl|default(image.media.url|default('')) }}"data-gallery-media-id="{{ image.media.id|default('') }}"></div>{% endfor %}</div><div class="carousel-navigation"><div class="controls"><div class="dots-container"></div><button class="left-arrow" aria-label="Image précédente">‹</button><button class="right-arrow" aria-label="Image suivante">›</button></div></div></div>{% if selectedImages|length >= 5 %}<div class="button-div button-mobile"><button type="button" id="view-all-photos-btn-mobile"><div class="icon-image" data-svg-static>{{ getLucidIcon('grip-vertical') }}</div><div>Voir toutes les photos ({{ totalGalleryImages|default(selectedImages|length) }})</div></button></div>{% endif %}</div>{% endif %}