#!/bin/bash
# Składa podstrony ze wspólnych części index.html (head, sprite ikon, nagłówek, stopka)
# oraz z treści <main> leżącej w katalogu parts/.
#
#   ./build.sh                 – przebudowuje wszystkie podstrony
#   ./build.sh oferta-desktop  – przebudowuje jedną (nazwa bez rozszerzenia)
#
# Po zmianie nagłówka, stopki albo sprite'a ikon w index.html wystarczy uruchomić
# ten skrypt, żeby wszystkie podstrony znów były spójne. Granice części wspólnych
# wyszukiwane są po znacznikach, a nie po numerach linii.
set -euo pipefail
cd "$(dirname "$0")"

build() {
  python3 - "$1" <<'PY'
import sys, io, re

slug = sys.argv[1]

META = {
    'oferta-desktop': (
        'Oferta hal namiotowych i stalowych – Protan Elmark',
        'Pełna oferta Protan Elmark: hale magazynowe, przemysłowe, wojskowe, sportowe, '
        'eventowe, rolnicze i stalowe STEELBERG. Poszycia, konstrukcje i wyposażenie '
        'dobrane do Twojego biznesu.',
        'assets/img/hero-oferta.jpg'),
    'oferta-wojskowe-desktop': (
        'Hale wojskowe – hangary, namioty kwaterunkowe i hale techniczne | Protan Elmark',
        'Hale i namioty wojskowe Protan Elmark: szybka instalacja, relokacja i niezawodne '
        'działanie w trudnych warunkach. Zgodność z AQAP 2110 i normami EN 1090.',
        'assets/img/hero-wojskowe.jpg'),
    'oferta-magazynowe-desktop': (
        'Hale magazynowe – namiotowe i stalowe hale na magazyn | Protan Elmark',
        'Hale magazynowe Protan Elmark – projektowane pod bezpieczne i efektywne '
        'magazynowanie towarów. Poszycia PCV, blacha i płyta warstwowa, szybki montaż, '
        'pełne wsparcie formalne.',
        'assets/img/hero-magazynowe.jpg'),
    'kontakt': (
        'Kontakt – Protan Elmark, producent hal namiotowych',
        'Skontaktuj się z Protan Elmark: infolinia 24/7 +48 690 690 510, info@protan-elmark.pl, '
        'formularz zapytania oraz bezpośrednie kontakty do działów sprzedaży, eksportu i produkcji.',
        'assets/img/hero.jpg'),
    'old-new': (
        'Hale namiotowe – producent hal namiotowych Protan Elmark',
        'Hale namiotowe od polskiego producenta: magazynowe, przemysłowe, produkcyjne, '
        'sportowe, rolnicze, imprezowe i wojskowe. Ponad 35 lat doświadczenia, ok. 500 hal '
        'rocznie, konfigurator 3D i wycena bez niespodzianek.',
        'assets/img/hero.jpg'),
    'old-new-1': (
        'Hale namiotowe – producent hal namiotowych | Protan Elmark',
        'Nowoczesne hale namiotowe od polskiego producenta – magazynowe, przemysłowe, '
        'produkcyjne, sportowe, rolnicze, imprezowe i wojskowe. Ponad 35 lat doświadczenia, '
        'ok. 500 hal rocznie, konfigurator 3D i indywidualna wycena.',
        'assets/img/hero.jpg'),
    'old-new-kontakt': (
        'Skontaktuj się z nami – Protan Elmark',
        'Kontakt do Protan Elmark: infolinia 24h +48 690 690 510, info@protan-elmark.pl, '
        'formularz zapytania oraz bezpośrednie kontakty do wszystkich działów firmy.',
        'assets/img/hero.jpg'),
    'old-new-hale-magazynowe': (
        'Hale namiotowe magazynowe – producent hal magazynowych | Protan Elmark',
        'Hale namiotowe magazynowe od producenta – dowolne wymiary, poszycia PCV, blacha '
        'trapezowa i płyta warstwowa, konstrukcje stalowe i aluminiowe. Szybki montaż, '
        'atrakcyjna cena, kompleksowa obsługa inwestycji.',
        'assets/img/hero-magazynowe.jpg'),
    'oferta-przemyslowe': (
        'Hale przemysłowe – namiotowe i stalowe hale produkcyjne | Protan Elmark',
        'Hale przemysłowe Protan Elmark – solidne obiekty pod produkcję, logistykę i procesy '
        'technologiczne. Indywidualny projekt, szybki montaż, leasing i pełne wsparcie formalne.',
        'assets/img/hero-przemyslowe.jpg'),
}

if slug not in META:
    sys.exit('Nieznany widok: %s (dostępne: %s)' % (slug, ', '.join(sorted(META))))

title, desc, ogimg = META[slug]
src = io.open('index.html', encoding='utf-8').read()


def cut(start, end, after=0):
    """Wycina fragment index.html od `start` do końca `end` (włącznie)."""
    i = src.index(start, after)
    j = src.index(end, i) + len(end)
    return src[i:j], j


head,   p = cut('<!DOCTYPE html>', '<a class="visually-hidden" href="#main">Przejdź do treści</a>')
sprite, p = cut('<svg width="0"', '\n</svg>', p)
header, p = cut('<div class="topbar">', '\n</header>', p)
footer, _ = cut('<footer class="footer"', '</html>', p)

head = head.replace('<title>Producent hal namiotowych – Protan Elmark</title>',
                    '<title>%s</title>' % title)
for attr, value in (('name="description"', desc),
                    ('property="og:title"', title),
                    ('property="og:description"', desc),
                    ('property="og:image"', ogimg)):
    head = re.sub(r'<meta %s content="[^"]*">' % re.escape(attr),
                  '<meta %s content="%s">' % (attr, value), head)

extra = io.open('parts/icons-extra.html', encoding='utf-8').read().rstrip('\n')
sprite = sprite.replace('\n</svg>', '\n' + extra + '\n</svg>')

body = io.open('parts/%s.main.html' % slug, encoding='utf-8').read().strip('\n')

io.open('%s.html' % slug, 'w', encoding='utf-8').write(
    head + '\n\n'
    + '<!-- =====================================================================\n'
      '     Sprite ikon – wszystkie ikony z projektu jako inline SVG\n'
      '     ===================================================================== -->\n'
    + sprite + '\n\n'
    + '<!-- =====================================================================\n'
      '     Pasek informacyjny + nagłówek / nawigacja\n'
      '     ===================================================================== -->\n'
    + header + '\n\n<main id="main">\n\n'
    + body + '\n\n</main>\n\n'
    + '<!-- =====================================================================\n'
      '     Stopka\n'
      '     ===================================================================== -->\n'
    + footer + '\n')
print('->', slug + '.html')
PY
}

if [ $# -gt 0 ]; then
  build "$1"
else
  for slug in oferta-desktop oferta-wojskowe-desktop oferta-magazynowe-desktop \
             oferta-przemyslowe kontakt old-new old-new-1 old-new-kontakt \
             old-new-hale-magazynowe; do
    build "$slug"
  done
fi
