#!/bin/bash
# Basic PowerPoint textboxes — alignment, multi-paragraph, bulleted lists,
# styled runs, per-script fonts (Latin/EastAsian), vertical alignment, padding.
# Demonstrates: --type textbox vs --type shape (textbox is an alias for shape),
# --type paragraph with align/lineSpacing/indent, --type run with bold/color/baseline,
# shape-level list=bullet|ordered, font.latin/font.ea, valign and margin/autoFit.

# NOTE: intentionally NO `set -e`. Like the SDK twin's doc.batch, this script
# tolerates forward-compat 'UNSUPPORTED props' warnings (officecli exit 2) and
# keeps building so the full document is produced.
DIR="$(dirname "$0")"
PPTX="$DIR/textboxes-basic.pptx"

rm -f "$PPTX"
officecli create "$PPTX"
officecli open "$PPTX"

# ─────────────────────────────────────────────────────────────────────────────
# Slide 1 — Horizontal alignment (4 textboxes, one per align value)
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[1]' --type textbox \
    --prop text="Horizontal Alignment" --prop size=28 --prop bold=true \
    --prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in

LOREM='Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus lacinia odio vitae vestibulum vestibulum.'

Y=1.3
for a in left center right justify; do
    officecli add "$PPTX" '/slide[1]' --type textbox \
        --prop x=0.5in --prop y="${Y}in" --prop width=12in --prop height=1.3in \
        --prop fill=F1FAEE --prop text="[align=$a] $LOREM" --prop size=14 \
        --prop align="$a"
    Y=$(echo "$Y + 1.5" | bc -l)
done

# ─────────────────────────────────────────────────────────────────────────────
# Slide 2 — Multi-paragraph + bulleted / numbered lists
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[2]' --type textbox \
    --prop text="Lists and Multi-Paragraph" --prop size=28 --prop bold=true \
    --prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in

# Bulleted list — start with one initial paragraph, append the rest, then turn on bullets.
officecli add "$PPTX" '/slide[2]' --type textbox \
    --prop x=0.5in --prop y=1.2in --prop width=6in --prop height=4in \
    --prop text="Coffee preparation steps" \
    --prop bold=true --prop size=18 --prop color=1D3557

officecli add "$PPTX" '/slide[2]/shape[1]' --type paragraph --prop text="Grind beans to medium-fine"
officecli add "$PPTX" '/slide[2]/shape[1]' --type paragraph --prop text="Heat water to 93°C"
officecli add "$PPTX" '/slide[2]/shape[1]' --type paragraph --prop text="Bloom 30s with 2× coffee weight"
officecli add "$PPTX" '/slide[2]/shape[1]' --type paragraph --prop text="Pour remaining water in spirals"
officecli add "$PPTX" '/slide[2]/shape[1]' --type paragraph --prop text="Total brew time: 3-4 minutes"

# Turn paragraphs 2-6 into bullets (level 0). Paragraph 1 is the title — leave unbulleted.
officecli set "$PPTX" '/slide[2]/shape[1]' --prop list=bullet

# Numbered list (ordered)
officecli add "$PPTX" '/slide[2]' --type textbox \
    --prop x=7in --prop y=1.2in --prop width=6in --prop height=4in \
    --prop text="Release checklist" \
    --prop bold=true --prop size=18 --prop color=1D3557

officecli add "$PPTX" '/slide[2]/shape[2]' --type paragraph --prop text="Run tests"
officecli add "$PPTX" '/slide[2]/shape[2]' --type paragraph --prop text="Tag the release"
officecli add "$PPTX" '/slide[2]/shape[2]' --type paragraph --prop text="Push to registry"
officecli add "$PPTX" '/slide[2]/shape[2]' --type paragraph --prop text="Announce in #releases"

officecli set "$PPTX" '/slide[2]/shape[2]' --prop list=numbered

# Indented sub-bullet — level=1 on a paragraph nests it one step in.
officecli add "$PPTX" '/slide[2]/shape[2]' --type paragraph \
    --prop text="(verify checksum)" --prop level=1
officecli set "$PPTX" '/slide[2]/shape[2]' --prop list=numbered

# ─────────────────────────────────────────────────────────────────────────────
# Slide 3 — Styled runs (rich text within one paragraph)
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[3]' --type textbox \
    --prop text="Rich Text — Runs" --prop size=28 --prop bold=true \
    --prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in

# Empty paragraph that we'll fill with multiple runs of different styles.
officecli add "$PPTX" '/slide[3]' --type textbox \
    --prop x=0.5in --prop y=1.5in --prop width=12in --prop height=1in \
    --prop text="" --prop size=20

officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run --prop text="The "
officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run \
    --prop text="quick " --prop bold=true --prop color=E63946
officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run \
    --prop text="brown " --prop italic=true --prop color=A0522D
officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run --prop text="fox jumps over the "
officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run \
    --prop text="lazy " --prop underline=single --prop color=2A9D8F
officecli add "$PPTX" '/slide[3]/shape[1]/p[1]' --type run --prop text="dog."

# Superscript / subscript via baseline
officecli add "$PPTX" '/slide[3]' --type textbox \
    --prop x=0.5in --prop y=3in --prop width=12in --prop height=0.8in \
    --prop text="" --prop size=24

officecli add "$PPTX" '/slide[3]/shape[2]/p[1]' --type run --prop text="E = mc"
officecli add "$PPTX" '/slide[3]/shape[2]/p[1]' --type run --prop text="2" --prop baseline=super
officecli add "$PPTX" '/slide[3]/shape[2]/p[1]' --type run --prop text="    and H"
officecli add "$PPTX" '/slide[3]/shape[2]/p[1]' --type run --prop text="2" --prop baseline=sub
officecli add "$PPTX" '/slide[3]/shape[2]/p[1]' --type run --prop text="O"

# Strikethrough + small caps + colored
officecli add "$PPTX" '/slide[3]' --type textbox \
    --prop x=0.5in --prop y=4.2in --prop width=12in --prop height=0.8in \
    --prop text="" --prop size=20

officecli add "$PPTX" '/slide[3]/shape[3]/p[1]' --type run \
    --prop text="OLD PRICE: \$99   " --prop strike=single --prop color=999999
officecli add "$PPTX" '/slide[3]/shape[3]/p[1]' --type run \
    --prop text="NOW \$49!" --prop bold=true --prop color=E63946 --prop size=24

# ─────────────────────────────────────────────────────────────────────────────
# Slide 4 — Per-script fonts (Latin + East Asian) + vertical alignment + padding
# ─────────────────────────────────────────────────────────────────────────────
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[4]' --type textbox \
    --prop text="Multilingual Fonts + Layout" --prop size=28 --prop bold=true \
    --prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in

# Mixed-script box: separate fonts for Latin and EastAsian text.
officecli add "$PPTX" '/slide[4]' --type textbox \
    --prop x=0.5in --prop y=1.5in --prop width=6in --prop height=2in \
    --prop fill=F1FAEE --prop margin=0.2in \
    --prop text="Hello, 世界! こんにちは、世界。" \
    --prop size=24 --prop bold=true \
    --prop font.latin="Georgia" --prop font.ea="Yu Mincho"

officecli add "$PPTX" '/slide[4]' --type textbox \
    --prop x=0.5in --prop y=3.7in --prop width=6in --prop height=0.5in \
    --prop text='font.latin=Georgia, font.ea="Yu Mincho"' \
    --prop size=12 --prop italic=true --prop color=666666

# Vertical alignment within a tall box
for va in top middle bottom; do
    case $va in
        top) X=7 ;;
        middle) X=9.5 ;;
        bottom) X=12 ;; # off-slide — squeeze
    esac
done

X=7
for va in top middle bottom; do
    officecli add "$PPTX" '/slide[4]' --type textbox \
        --prop x="${X}in" --prop y=1.5in --prop width=2in --prop height=3in \
        --prop fill=A8DADC --prop margin=0.15in \
        --prop text="valign=$va" --prop size=16 --prop bold=true \
        --prop valign="$va" --prop align=center
    X=$(echo "$X + 2.2" | bc -l)
done

officecli add "$PPTX" '/slide[4]' --type textbox \
    --prop x=7in --prop y=4.8in --prop width=6in --prop height=0.5in \
    --prop text='valign + per-box margin + align=center' \
    --prop size=12 --prop italic=true --prop color=666666

officecli close "$PPTX"
officecli validate "$PPTX"
echo "Created: $PPTX"
