package main

import (
  "fmt"
  "os"
  "strings"
)

func main() {
  if len(os.Args) != 3 {
    fmt.Fprintln(os.Stderr, "usage: patch_caddy <in> <out>")
    os.Exit(2)
  }
  b, err := os.ReadFile(os.Args[1])
  if err != nil { panic(err) }
  s := string(b)
  site := "sub-lb.tap365.org {"
  start := strings.Index(s, site)
  if start < 0 { panic("site block not found") }
  next := strings.Index(s[start+len(site):], "\n}\n")
  if next < 0 { panic("site block end not found") }
  end := start + len(site) + next + len("\n}\n")
  before, block, after := s[:start], s[start:end], s[end:]
  old := "reverse_proxy http://127.0.0.1:8090 http://74.48.114.71:48090 http://103.114.163.226:48090 {"
  neu := "reverse_proxy http://127.0.0.1:8090 http://127.0.0.1:6013 http://103.114.163.226:48090 {"
  if strings.Count(block, old) != 1 {
    panic(fmt.Sprintf("expected one target reverse_proxy line in sub-lb block, got %d", strings.Count(block, old)))
  }
  block = strings.Replace(block, old, neu, 1)
  out := before + block + after
  if err := os.WriteFile(os.Args[2], []byte(out), 0644); err != nil { panic(err) }
}
