<?php

use Symfony\Component\Yaml\Yaml;

require './vendor/autoload.php';

$config = Yaml::parseFile('config.yaml');

$data = [
  'http' => [
    'routers' => [],
    'services' => [],
  ],
];
foreach ($config['servers'] as $server_name => $server_ip) {
  $proxy_routers = @file_get_contents("http://{$server_ip}:8080/api/http/routers");
  if (empty($proxy_routers)) {
    continue;
  }
  $proxy_routers = json_decode($proxy_routers, TRUE);
  $server_key = 'proxy-'.$server_name;
  $data['http']['services'][$server_key] = [
    'loadBalancer' => [
      'servers' => [
        ['url' => "http://{$server_ip}:80"],
      ],
      'passHostHeader' => TRUE,
    ],
  ];
  foreach ($proxy_routers as $router) {
    if ($router['status'] !== 'enabled' || $router['provider'] !== 'docker') {
      continue;
    }
    preg_match_all("/Host\(\`(?'domain'[a-zA-Z\.\-]+)\`\)/m", $router['rule'], $rule_hosts);
    if (empty($rule_hosts['domain'])) {
      continue;
    }

    $domains = [];
    foreach ($rule_hosts['domain'] as $domain) {
      $is_docker_name = !str_contains($domain, '.');
      if ($is_docker_name) {
        continue;
      }
      $domains[] = $domain;
    }
    if (empty($domains)) {
      continue;
    }

    $main_router = [
      'entryPoints' => ['websecure'],
      'rule' => $router['rule'],
      'service' => $server_key,
      'tls' => [
        'certResolver' => 'defaultResolver',
        'domains' => [],
      ],
    ];

    foreach ($domains as $domain) {
      $main_router['tls']['domains'][] = [
        'main' => $domain,
        'sans' => [],
      ];
    }

    $router_name = $server_key . '--' . $router['name'];
    $router_name = str_replace(['@'], '_', $router_name);
    $data['http']['routers'][$router_name] = $main_router;
  }
}


header('application/x-yaml');
echo Yaml::dump($data, 4, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK | Yaml::DUMP_OBJECT_AS_MAP);