#!/usr/bin/env python

import os
import sys

if len(sys.argv) != 4:
    print >> sys.stderr, '''
Usage: %s config_file difference_file location_name > map.ps
''' % os.path.basename(sys.argv[0])
    sys.exit()

def getline(fp):
    while True:
        i = fp.readline().strip()
        if i and i[0] != '#':
            return i

colorlines = '''
1 1 0.9979133 
1 1 0.951178 
1 1 0.904911 
1 1 0.8595787 
0.9936441 0.9975165 0.8157186 
0.9766634 0.9908928 0.7751566 
0.9537174 0.9819685 0.7408325 
0.9261637 0.971293 0.7157217 
0.8940859 0.9588669 0.7015761 
0.853902 0.9431143 0.6966288 
0.8013755 0.9221774 0.698484 
0.7328502 0.8944876 0.7048092 
0.6514241 0.8618412 0.7140098 
0.5645519 0.8282048 0.7249673 
0.4797463 0.797567 0.7365706 
0.4021244 0.7716024 0.7476638 
0.3317804 0.7471322 0.7569964 
0.268176 0.7203667 0.7633064 
0.2111159 0.6878304 0.76541 
0.1631302 0.6485423 0.7627474 
0.1280489 0.6027108 0.7550558 
0.1096479 0.5505687 0.7420829 
0.1079946 0.4933524 0.7240725 
0.1174074 0.4338541 0.7020381 
0.1317104 0.3750003 0.6770591 
0.1449949 0.3195292 0.6498102 
0.1528481 0.2691288 0.6187012 
0.1513770 0.2251213 0.5813547 
0.1368118 0.1887735 0.5354694 
0.1090943 0.1596755 0.481082 
0.07245721 0.1354784 0.4209323 
0.03137255 0.1137255 0.3579104 
'''

colors = []
for i in colorlines.split('\n'):
    i = i.strip()
    if i:
        colors.append(i.replace(' ', '\n'))

n_colors = len(colors)

configfile = sys.argv[1]
infile = sys.argv[2]
label = sys.argv[3]
tmpfile = 'mapref.tmp'

lbls = []

fp = open(infile, 'r')
n_locations = int(getline(fp))
idx = -1
for i in range(n_locations):
    lbl = getline(fp)
    lbls.append(lbl)
    if lbl == label:
        idx = i
if idx < 0:
    print >> sys.stderr, '\nLabel "%s" not found in file "%s"\n' % (label, infile)
    sys.exit()

diffs = [0.0 for i in range(n_locations)]
for i in range(n_locations):
    for j in range(i):
        f = float(getline(fp))
        if i == idx:
            diffs[j] = f
        elif j == idx:
            diffs [i] = f

fp.close()

maximum = 0
for i in range(n_locations):
    if diffs[i] > maximum:
        maximum = diffs[i]
minimum = maximum
for i in range(n_locations):
    if i != idx and diffs[i] < minimum:
        minimum = diffs[i]


fp = open(tmpfile, 'w')
fp.write('3\n')
for i in range(n_locations):
    fp.write(lbls[i] + '\n')
    if i == idx:
        fp.write('1\n0\n0\n')
    else:
        c = int((diffs[i] - minimum) / (maximum - minimum) * n_colors)
        if c >= n_colors:
            c = n_colors - 1
        fp.write(colors[c] + '\n')
        
fp.close()

os.system('maprgb -r %s %s' % (configfile, tmpfile))
os.remove(tmpfile)
