<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Sketch Monaco Viewer Demo</title>
    <script type="module" src="../sketch-monaco-view.ts"></script>
    <style>
      body {
        font-family:
          -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica,
          Arial, sans-serif;
        max-width: 1200px;
        margin: 0 auto;
        padding: 2rem;
      }

      h1 {
        color: #333;
        margin-bottom: 2rem;
      }

      .control-panel {
        margin-bottom: 2rem;
        padding: 1rem;
        background-color: #f0f0f0;
        border-radius: 4px;
      }
      
      button {
        padding: 8px 12px;
        background-color: #4285f4;
        color: white;
        border: none;
        border-radius: 4px;
        cursor: pointer;
        margin-right: 8px;
      }
      
      button:hover {
        background-color: #3367d6;
      }
      
      sketch-monaco-view {
        margin-top: 20px;
        height: 500px;
      }
    </style>
  </head>
  <body>
    <h1>Sketch Monaco Viewer Demo</h1>

    <div class="control-panel">
      <p>This is a demo page for the sketch-monaco-view component.</p>
      <div>
        <button id="example1">Example 1: JavaScript</button>
        <button id="example2">Example 2: HTML</button>
        <button id="example3">Example 3: Go</button>
      </div>
    </div>

    <sketch-monaco-view id="diffEditor"></sketch-monaco-view>
    
    <script>
      document.addEventListener('DOMContentLoaded', () => {
        const diffEditor = document.getElementById('diffEditor');
        
        // Set initial example
        diffEditor.originalCode = `function hello() {
  console.log("Hello World");
  return true;
}`;
        
        diffEditor.modifiedCode = `function hello() {
  // Add a comment
  console.log("Hello Updated World");
  return true;
}`;
        
        // Example 1: JavaScript
        document.getElementById('example1').addEventListener('click', () => {
          diffEditor.setOriginalCode(
            `function calculateTotal(items) {
  return items
    .map(item => item.price * item.quantity)
    .reduce((a, b) => a + b, 0);
}`,
            'original.js'
          );
          
          diffEditor.setModifiedCode(
            `function calculateTotal(items) {
  // Apply discount if available
  return items
    .map(item => {
      const price = item.discount ? 
        item.price * (1 - item.discount) : 
        item.price;
      return price * item.quantity;
    })
    .reduce((a, b) => a + b, 0);
}`,
            'modified.js'
          );
        });
        
        // Example 2: HTML
        document.getElementById('example2').addEventListener('click', () => {
          diffEditor.setOriginalCode(
            `<!DOCTYPE html>
<html>
<head>
  <title>Demo Page</title>
</head>
<body>
  <h1>Hello World</h1>
  <p>This is a paragraph.</p>
</body>
</html>`,
            'original.html'
          );
          
          diffEditor.setModifiedCode(
            `<!DOCTYPE html>
<html>
<head>
  <title>Demo Page</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header>
    <h1>Hello World</h1>
  </header>
  <main>
    <p>This is a paragraph with some <strong>bold</strong> text.</p>
  </main>
  <footer>
    <p>&copy; 2025</p>
  </footer>
</body>
</html>`,
            'modified.html'
          );
        });
        
        // Example 3: Go
        document.getElementById('example3').addEventListener('click', () => {
          diffEditor.setOriginalCode(
            `package main

import "fmt"

func main() {
	fmt.Println("Hello, world!")
}`,
            'original.go'
          );
          
          diffEditor.setModifiedCode(
            `package main

import (
	"fmt"
	"time"
)

func main() {
	fmt.Println("Hello, world!")
	fmt.Printf("The time is %s\n", time.Now().Format(time.RFC3339))
}`,
            'modified.go'
          );
        });
      });
    </script>
  </body>
</html>
