import json
import io
import sys


with io.open(
    sys.argv[1],
    'r'
) as f:
    forward_nginx = json.load(f)

with io.open(
    sys.argv[2],
    'w'
) as f:
    names = [o['app_name'] for o in forward_nginx]

    if not '' in names:
        forward_nginx.append(
            dict(
                app_name='',
                redirect_url='https://product-development-service.blogspot.com',
            )
        )

    sections = []
    for entry in forward_nginx:
        location = None

        if entry['app_name'] != '':
            location = '/%s/' % entry['app_name']
        else:
            location = '/'

        if 'target_endpoint' in entry:
            section_body = r'''
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-For $t1;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_redirect off;
      proxy_buffering off;
      proxy_pass {target_endpoint};
            '''.replace(
                '{target_endpoint}', entry['target_endpoint'],
            )
        elif 'redirect_url' in entry:
            section_body = r'''
      return 302 {redirect_url}$request_uri;
            '''.replace(
                '{redirect_url}', entry['redirect_url'],
            )
        else:
            raise NotImplementedError

        sections.append(r'''
    location ^~ {location} {
        {section_body}
    }
        '''.replace(
            '{section_body}', section_body,
        ).replace(
            '{location}', location,
        ))
    f.write(r'''
events {
  multi_accept on;
  worker_connections 64;
}

http {
  log_format main
    '[$time_local][$remote_addr, $http_x_forwarded_for, $t1, $http_host]'
    '[$request_length,$bytes_sent,$request_time]'
    '[$status][$request]'
    '[$http_user_agent][$http_referer]';

  access_log /dev/null combined;
  access_log /dev/stderr main;

  server {
    set $t1 $remote_addr;
    if ($http_x_forwarded_for)
    {
      set $t1 $http_x_forwarded_for;
    }


    listen 80;
    client_max_body_size 50M;

    {sections_config}
  }

  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }
}
    '''.replace(
      '{sections_config}', '\n'.join(sections)
    ))