#!/usr/bin/env python3
"""Gemeinsames adesso-Styling für die Workshop-Folien.
Teal->Blau-Verlauf, Fira Sans, weiße Shapes + Coral-Akzente,
Header (Pill + Titel) und schlanke Fußzeile (Seitenzahl + adesso)."""

from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
from pptx.oxml.ns import qn

# ---- adesso Palette --------------------------------------------------------
WHITE = RGBColor(0xFF, 0xFF, 0xFF)
INK   = RGBColor(0x0E, 0x2A, 0x47)   # tiefes Navy – Text auf hellen Boxen / dunkle Füllungen
BLUE  = RGBColor(0x00, 0x6E, 0xC7)
TEAL  = RGBColor(0x28, 0xDC, 0xAA)
GREEN = RGBColor(0x76, 0xC8, 0x00)
CORAL = RGBColor(0xFF, 0x98, 0x68)
PINK  = RGBColor(0xF5, 0x66, 0xBA)
TAUPE = RGBColor(0x88, 0x7D, 0x75)
LIGHT = RGBColor(0xD7, 0xE6, 0xF4)   # helle, gedämpfte Schrift/Linien auf dem Verlauf
MUTE  = RGBColor(0x6B, 0x77, 0x85)   # mittleres Grau – Text auf weißen Flächen
RECF  = RGBColor(0xE6, 0xEF, 0xF8)   # helle Kästchen in weißen Boxen

F  = "Fira Sans"
FC = "Fira Sans Condensed"


def alpha(shape, opacity_pct):
    """Deckkraft (0-100) auf die Solid-Füllung setzen."""
    srgb = shape._element.spPr.find(qn('a:solidFill')).find(qn('a:srgbClr'))
    srgb.append(srgb.makeelement(qn('a:alpha'), {'val': str(int(opacity_pct * 1000))}))


def line_alpha(shape, opacity_pct):
    ln = shape._element.spPr.find(qn('a:ln'))
    srgb = ln.find(qn('a:solidFill')).find(qn('a:srgbClr'))
    srgb.append(srgb.makeelement(qn('a:alpha'), {'val': str(int(opacity_pct * 1000))}))


def paint_background(s, width, height):
    """Teal->Blau-Verlauf als Folienhintergrund."""
    bgr = s.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, width, height)
    bgr.line.fill.background(); bgr.shadow.inherit = False
    bgr.fill.gradient()
    try:
        bgr.fill.gradient_angle = 90.0
    except Exception:
        pass
    st = bgr.fill.gradient_stops
    st[0].position = 0.0; st[0].color.rgb = TEAL
    st[1].position = 1.0; st[1].color.rgb = BLUE
    return bgr


def chrome(s, title, page):
    """Header (Pill + Titel) + schlanke Fußzeile (Seitenzahl + adesso)."""
    pill = s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,
                              Inches(0.55), Inches(0.46), Inches(0.5), Inches(0.26))
    pill.fill.background(); pill.line.color.rgb = WHITE; pill.line.width = Pt(1.5)
    pill.shadow.inherit = False
    try: pill.adjustments[0] = 0.5
    except Exception: pass

    def _t(x, y, w, h, t, size, color, bold=False, align=PP_ALIGN.LEFT, font=FC):
        tb = s.shapes.add_textbox(x, y, w, h); tf = tb.text_frame
        tf.word_wrap = True; tf.margin_left = tf.margin_right = Pt(0)
        tf.margin_top = tf.margin_bottom = Pt(0)
        p = tf.paragraphs[0]; p.alignment = align
        r = p.add_run(); r.text = t
        r.font.size = Pt(size); r.font.bold = bold; r.font.name = font; r.font.color.rgb = color

    _t(Inches(1.25), Inches(0.34), Inches(11), Inches(0.7), title, 30, WHITE, bold=True)
    _t(Inches(0.55), Inches(7.06), Inches(1.0), Inches(0.3), str(page), 11, LIGHT)
    _t(Inches(10.95), Inches(6.99), Inches(1.85), Inches(0.4), "adesso", 17, WHITE,
       bold=True, align=PP_ALIGN.RIGHT)
