#! /usr/bin/env python3

import argparse
import cairo
import shapely

from xmet.db       import Database
from xmet.sounding import Sounding
from xmet.skew_t   import SkewTGraph, SkewTLegend

IMAGE_WIDTH  = 800
IMAGE_HEIGHT = 800

GRAPH_WIDTH  = 800 - 128
GRAPH_HEIGHT = 800 - 128

parser = argparse.ArgumentParser(
    description = 'Graph most recent valid sounding for location'
)

parser.add_argument('db',        help='XMET SQLite3 database')
parser.add_argument('lat',       help='Latitude')
parser.add_argument('lon',       help='Longitude')
parser.add_argument('timestamp', help='Timestamp in YYYY-MM-DD HH:MM:SS (UTC)')
parser.add_argument('output',    help='Output SVG file')

args = parser.parse_args()

db = Database.connect(args.db)

location = shapely.Point(float(args.lon), float(args.lat))
sounding = Sounding.valid_by_location(db, location, args.timestamp)

print(f"Graphing {sounding.station} sounding at {sounding.timestamp_observed}")

skew_t = SkewTGraph(GRAPH_WIDTH, GRAPH_HEIGHT)

with cairo.SVGSurface(args.output, IMAGE_WIDTH, IMAGE_HEIGHT) as surface:
    cr = cairo.Context(surface)

    cr.set_source_rgb(1, 1, 1)
    cr.rectangle(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT)
    cr.fill()

    skew_t.draw(cr, 64, 64, sounding)

    cr.set_source_rgb(0, 0, 0)
    cr.rectangle(64, 64, GRAPH_WIDTH, GRAPH_HEIGHT)
    cr.stroke()

    SkewTLegend.draw_for_graph(cr, skew_t, 64, 64)