#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function, division, unicode_literals
import csv
from gavo import utils
from datetime import datetime
from collections import namedtuple

ExtraLine = namedtuple("ExtraLine", [
    "plate_number", "mean_UT", "RA_obs", "Dec_obs", "star", "PST_start",
    "sid_time", "hour_angle", "exp_time", "remarks"
])

def deminutify(value):
    if value.endswith("min"):
        value = float(value.replace("min", "")) * 60
    else:
        value = float(value)

    return value

def fix_incoming_notes(x):
    #x = map(lambda y: y.strip(), x.strip().split('*'))
    x = [y.strip() for y in x.strip().split("*")]

    return (x[0], x[1])

def fix_incoming_emulsion(x):
    #x = map(lambda y: y.strip(), x.strip().split('|'))
    x = [y.strip() for y in x.strip().split("|")]

    return (x[0], x[1])

def main():
    with open("docs/plate-notes.txt") as notefile:
        notes = dict(map(fix_incoming_notes, notefile))

    with open("docs/plate-emulsion.txt") as emulsionfile:
        emulsions = dict(map(fix_incoming_emulsion, emulsionfile))

    with open("docs/extraplates.txt") as extrafile:
        extra = dict()

        for lineno, line in utils.iterSimpleText(extrafile):
            row = ExtraLine(*[_.strip() for _ in line.split("|")])
            extra["0" + row.plate_number] = row

    def fix_incoming_log(x):
        #x = map(lambda y: y.strip(), x.strip().split('|'))
        x = [y.strip() for y in x.strip().split("|")]
        x[0] = x[0][:5] # remove the last char from platenum if any
        x[1] = x[1][:16] # remove trailing char if any
        x[-1] = notes.get(x[0], "") # append note if any
        x.append(emulsions.get(x[0], ""))

        return x

    with open("docs/plate-log.txt") as logfile:
        log = {key: [
            key,
            value.mean_UT,
            deminutify(value.exp_time),
            "",
            " ".join((value.RA_obs, value.Dec_obs)),
            value.remarks,
            ""
        ] for key, value in extra.items()}

        log.update({_[0]: _ for _ in map(fix_incoming_log, logfile)})

    with open("docs/plate-combined.txt", "wb") as outfile:
        writer = csv.writer(outfile)
        writer.writerows(log.values())

if __name__ == "__main__":
    main()
