<#
Fragt im Stil des Bot-Overlays, ob das lokale KI-Modell (Ollama)
eingerichtet werden soll.

Rueckgabe ueber den Exit-Code:
  0 = installieren
  1 = ueberspringen (auch wenn das Fenster ueber X geschlossen wird -
      ohne ausdrueckliches Ja wird nichts installiert)

Mit -RenderTo <pfad.png> wird das Fenster NICHT angezeigt, sondern nur in
eine PNG-Datei gezeichnet. So laesst sich das Aussehen ohne Bildschirm
pruefen (auch ueber eine Remote-Sitzung).
#>
param(
    [string]$RenderTo
)

Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase

# Designsprache 1:1 aus webui/app.css (Dark-Mode):
#   Accent #e33a63 / Hover #f0557b, Text #eef2f9 / soft #b9c3d4 / muted #8b98ad,
#   Hintergrund-Verlauf #070b14 -> #0b1322 -> #080b16, Radien 24/16/12,
#   Glow-Blobs Accent/Blau/Gruen, Segoe UI.
$xaml = @'
<Border xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Card" Width="460" CornerRadius="24"
        TextElement.FontFamily="Segoe UI" TextElement.Foreground="#eef2f9"
        SnapsToDevicePixels="True">
  <Border.Background>
    <LinearGradientBrush StartPoint="0.15,0" EndPoint="0.85,1">
      <GradientStop Color="#070b14" Offset="0"/>
      <GradientStop Color="#0b1322" Offset="0.48"/>
      <GradientStop Color="#080b16" Offset="1"/>
    </LinearGradientBrush>
  </Border.Background>
  <Border.Effect>
    <DropShadowEffect Color="#03070f" BlurRadius="48" ShadowDepth="0" Opacity="0.55"/>
  </Border.Effect>
  <Border.Resources>
    <Style x:Key="Primary" TargetType="Button">
      <Setter Property="Foreground" Value="#ffffff"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="FontWeight" Value="SemiBold"/>
      <Setter Property="Cursor" Value="Hand"/>
      <Setter Property="SnapsToDevicePixels" Value="True"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border x:Name="b" CornerRadius="12" Padding="18,13">
              <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                  <GradientStop Color="#f0557b" Offset="0"/>
                  <GradientStop Color="#e33a63" Offset="1"/>
                </LinearGradientBrush>
              </Border.Background>
              <Border.Effect>
                <DropShadowEffect Color="#e33a63" BlurRadius="22" ShadowDepth="0" Opacity="0.5"/>
              </Border.Effect>
              <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="b" Property="Opacity" Value="0.93"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    <Style x:Key="Ghost" TargetType="Button">
      <Setter Property="Foreground" Value="#b9c3d4"/>
      <Setter Property="FontSize" Value="14"/>
      <Setter Property="FontWeight" Value="Medium"/>
      <Setter Property="Cursor" Value="Hand"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border x:Name="b" CornerRadius="12" Padding="18,13"
                    Background="#12FFFFFF" BorderBrush="#1AFFFFFF" BorderThickness="1">
              <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="b" Property="Background" Value="#1FFFFFFF"/>
                <Setter Property="Foreground" Value="#eef2f9"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
    <Style x:Key="Close" TargetType="Button">
      <Setter Property="Foreground" Value="#8b98ad"/>
      <Setter Property="FontSize" Value="16"/>
      <Setter Property="Cursor" Value="Hand"/>
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Button">
            <Border x:Name="b" CornerRadius="9" Width="30" Height="30" Background="Transparent">
              <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter TargetName="b" Property="Background" Value="#14FFFFFF"/>
                <Setter Property="Foreground" Value="#eef2f9"/>
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Border.Resources>

  <Grid>
    <!-- Atmosphaere: weiche Glow-Blobs wie im Overlay -->
    <Canvas ClipToBounds="True">
      <Ellipse Canvas.Left="-70" Canvas.Top="-90" Width="260" Height="260" Opacity="0.55">
        <Ellipse.Fill><RadialGradientBrush><GradientStop Color="#E6e33a63" Offset="0"/><GradientStop Color="#00e33a63" Offset="0.65"/></RadialGradientBrush></Ellipse.Fill>
        <Ellipse.Effect><BlurEffect Radius="70"/></Ellipse.Effect>
      </Ellipse>
      <Ellipse Canvas.Right="-80" Canvas.Top="20" Width="240" Height="240" Opacity="0.5">
        <Ellipse.Fill><RadialGradientBrush><GradientStop Color="#993b82f6" Offset="0"/><GradientStop Color="#003b82f6" Offset="0.65"/></RadialGradientBrush></Ellipse.Fill>
        <Ellipse.Effect><BlurEffect Radius="80"/></Ellipse.Effect>
      </Ellipse>
      <Ellipse Canvas.Left="60" Canvas.Bottom="-120" Width="300" Height="300" Opacity="0.4">
        <Ellipse.Fill><RadialGradientBrush><GradientStop Color="#8022c55e" Offset="0"/><GradientStop Color="#0022c55e" Offset="0.65"/></RadialGradientBrush></Ellipse.Fill>
        <Ellipse.Effect><BlurEffect Radius="90"/></Ellipse.Effect>
      </Ellipse>
    </Canvas>

    <!-- feiner Glasrand -->
    <Border CornerRadius="24" BorderThickness="1" BorderBrush="#1FFFFFFF"/>

    <StackPanel Margin="34,30,34,30">
      <!-- Kopfzeile: Icon + Schliessen -->
      <Grid>
        <Border Width="54" Height="54" CornerRadius="16" HorizontalAlignment="Left"
                Background="#1Fe33a63" BorderBrush="#40e33a63" BorderThickness="1">
          <Path Data="M12,2 L14.2,9.0 L21,11.2 L14.2,13.4 L12,20.4 L9.8,13.4 L3,11.2 L9.8,9.0 Z M18.5,2.5 L19.4,5.1 L22,6 L19.4,6.9 L18.5,9.5 L17.6,6.9 L15,6 L17.6,5.1 Z"
                Fill="#f0557b" Stretch="Uniform" Width="26" Height="26"
                HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Border>
        <Button x:Name="BtnClose" Style="{StaticResource Close}" Content="&#x2715;"
                HorizontalAlignment="Right" VerticalAlignment="Top"/>
      </Grid>

      <TextBlock Text="Ollama installieren?" Foreground="#eef2f9" FontSize="25"
                 FontWeight="SemiBold" Margin="0,20,0,6"/>
      <TextBlock Text="Lokale KI für Smart Recovery und menschliche Antworten"
                 Foreground="#b9c3d4" FontSize="14" Margin="0,0,0,16"/>

      <TextBlock Foreground="#b9c3d4" FontSize="13.5" TextWrapping="Wrap" LineHeight="21"
                 Margin="0,0,0,16">
        Ollama lässt die KI direkt auf diesem PC laufen – ohne Cloud, ohne Zusatzkosten. Der Bot nutzt sie für zwei Dinge: den Smart-Recovery-Blick, wenn er einmal hängt (die KI schaut auf den Bildschirm und findet selbst wieder heraus), und menschlich klingende Chat-Antworten an Spieler und GMs.
      </TextBlock>

      <!-- Optional-Hinweis -->
      <Border CornerRadius="16" Background="#14FFFFFF" BorderBrush="#14FFFFFF"
              BorderThickness="1" Padding="16,14" Margin="0,0,0,22">
        <StackPanel>
          <StackPanel Orientation="Horizontal" Margin="0,0,0,7">
            <Ellipse Width="8" Height="8" Fill="#fbbf24" VerticalAlignment="Center" Margin="0,0,9,0"/>
            <TextBlock Text="Optional – der Bot läuft auch ohne" Foreground="#eef2f9"
                       FontSize="13" FontWeight="SemiBold" VerticalAlignment="Center"/>
          </StackPanel>
          <TextBlock Foreground="#8b98ad" FontSize="12.5" TextWrapping="Wrap" LineHeight="19"
                     Text="Jagen, Heilen, Looten, Route und Depot laufen vollständig auch ohne KI. Die Modelle sind zusammen einige GB groß und brauchen etwas Leistung – am besten eine Grafikkarte. Die Chat-Antworten bleiben ohnehin abschaltbar und sind erst aktiv, wenn du sie im Bot-Menü einschaltest. Auf schwächeren PCs lässt du Ollama besser weg und holst es jederzeit nach."/>
        </StackPanel>
      </Border>

      <!-- Aktionen -->
      <Grid>
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="*"/>
          <ColumnDefinition Width="12"/>
          <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <Button x:Name="BtnInstall" Grid.Column="0" Style="{StaticResource Primary}"
                Content="Ollama installieren"/>
        <Button x:Name="BtnSkip" Grid.Column="2" Style="{StaticResource Ghost}"
                Content="Überspringen"/>
      </Grid>
    </StackPanel>
  </Grid>
</Border>
'@

$card = [Windows.Markup.XamlReader]::Parse($xaml)

# --- Reiner Vorschau-Modus: in PNG rendern, kein Fenster ---
if ($RenderTo) {
    $card.Measure([Windows.Size]::new(460, [double]::PositiveInfinity))
    $h = [math]::Ceiling($card.DesiredSize.Height)
    $card.Arrange([Windows.Rect]::new(0, 0, 460, $h))
    $card.UpdateLayout()
    $scale = 2  # scharfe 2x-Vorschau
    $rtb = [Windows.Media.Imaging.RenderTargetBitmap]::new(
        [int](460 * $scale), [int]($h * $scale), 96 * $scale, 96 * $scale,
        [Windows.Media.PixelFormats]::Pbgra32)
    $rtb.Render($card)
    $enc = [Windows.Media.Imaging.PngBitmapEncoder]::new()
    $enc.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($rtb))
    $fs = [IO.File]::Create($RenderTo)
    try { $enc.Save($fs) } finally { $fs.Close() }
    exit 0
}

# Ohne interaktiven Desktop (Dienst, Fernwartung, automatischer Lauf) kein
# Fenster zeigen - ShowDialog haette dort niemanden, der klickt, und wuerde
# haengen. In dem Fall wird uebersprungen (Exit 1).
if (-not [Environment]::UserInteractive) { exit 1 }

# --- Interaktiv: Fenster zeigen, Auswahl als Exit-Code ---
$window = New-Object Windows.Window
$window.WindowStyle = 'None'
$window.AllowsTransparency = $true
$window.Background = [Windows.Media.Brushes]::Transparent
$window.SizeToContent = 'WidthAndHeight'
$window.WindowStartupLocation = 'CenterScreen'
$window.ResizeMode = 'NoResize'
$window.Title = 'TibiaPilotNG'
$window.Topmost = $true
$window.Content = $card

$script:choice = 1  # Standard: ueberspringen
$card.FindName('BtnInstall').Add_Click({ $script:choice = 0; $window.Close() })
$card.FindName('BtnSkip').Add_Click({ $script:choice = 1; $window.Close() })
$card.FindName('BtnClose').Add_Click({ $script:choice = 1; $window.Close() })
# Fenster am Rahmen ziehbar (kein Titelbalken)
$window.Add_MouseLeftButtonDown({ if ($_.ButtonState -eq 'Pressed') { $window.DragMove() } })

$window.ShowDialog() | Out-Null
exit $script:choice
