#!/usr/bin/env python3
import http.server
import socketserver
import os
import urllib.request
import urllib.error

PORT = 8000
SCRIPT_URL = 'https://script.google.com/macros/s/AKfycbyQEOZ0mV09wAeJslS4b3ht3nnP0JtkQwefVtren9M2TZa7BOgjK5dSGTVKwpZYSPyvPw/exec'

os.chdir(os.path.dirname(os.path.abspath(__file__)))

class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate')
        self.send_header('Access-Control-Allow-Origin', '*')
        self.send_header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
        self.send_header('Access-Control-Allow-Headers', 'Content-Type')
        super().end_headers()

    def do_OPTIONS(self):
        self.send_response(200)
        self.end_headers()

    def do_POST(self):
        if self.path == '/submit':
            content_length = int(self.headers.get('Content-Length', 0))
            body = self.rfile.read(content_length) if content_length else b''
            content_type = self.headers.get('Content-Type', 'application/x-www-form-urlencoded')

            req = urllib.request.Request(SCRIPT_URL, data=body, headers={
                'Content-Type': content_type,
                'User-Agent': 'LocalProxy/1.0',
            })

            try:
                with urllib.request.urlopen(req) as resp:
                    response_body = resp.read()
                    self.send_response(resp.getcode())
                    self.send_header('Content-Type', resp.headers.get('Content-Type', 'text/plain'))
                    self.end_headers()
                    self.wfile.write(response_body)
            except urllib.error.HTTPError as e:
                self.send_response(e.code)
                self.send_header('Content-Type', 'text/plain')
                self.end_headers()
                self.wfile.write(e.read())
            except Exception as e:
                self.send_response(502)
                self.send_header('Content-Type', 'text/plain')
                self.end_headers()
                self.wfile.write(str(e).encode())
        else:
            super().do_POST()

with socketserver.TCPServer(("", PORT), MyHTTPRequestHandler) as httpd:
    print(f"Server running at http://localhost:{PORT}/")
    print(f"Open: http://localhost:{PORT}/learning-ar.html")
    print("Press Ctrl+C to stop")
    try:
        httpd.serve_forever()
    except KeyboardInterrupt:
        print("\nServer stopped.")
