#! /usr/bin/env python
# -*- coding: iso-8859-15 -*-

# ATTENTION: necessary to install pdfrw library (sudo port install py27-pdfrw)

import matplotlib as mpl
mpl.use('Agg') # necessary to be able to generate the reports even without X server
import matplotlib.pyplot as plt

import datetime
import numpy as np
from . import gravi_visual_class
        
#==============================================================================
# Preparation of the report using reportlab
#==============================================================================
def produce_dispvis_report(dispvis,filename):
    # From gravi_visual_class
    from . import gravi_visual_class
    from .gravi_visual_class import PdfImage, myFirstPage, myLaterPages, styles
    from .gravi_visual_class import clipdata, transbarchartout, graphoutaxes, graphoutnoaxis
    from .gravi_visual_class import graphoutnoxaxes, graphscatteraxes, graphaxesplt
    from .gravi_visual_class import plotTitle, plotSubtitle
    from .gravi_visual_class import get_key_withdefault, create_array_from_list, baseline_phases
    from .gravi_visual_class import mean_angle, std_angle, clean_unwrap_phase, nanaverage
    from .gravi_visual_class import clean_gdelay_is, clean_gdelay_fft, clean_gdelay_full
    from .gravi_visual_class import base_list, tel_list, nbase, ntel, round_to_n
    from .gravi_visual_class import plotReductionSummary, plotSummary, plotQCSummary
    
    from .gravi_visual_class import graphoutdarkaxes

    from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, Image, PageBreak
    from reportlab.graphics.shapes import String
    from reportlab.lib.units import inch, cm, mm
    from reportlab.lib import colors
    import io
    from io import StringIO

    #==============================================================================
    # Global parameters
    #==============================================================================

    datatype = dispvis.header['HIERARCH ESO PRO CATG']
    specres = dispvis.header['HIERARCH ESO INS SPEC RES']
    plotmargin = 0.15

    hsize = 16*cm
    vsize = 5*cm
    xmin = 1.9
    xmax = 2.5
    tickx = 0.1

    #==============================================================================
    # Start Story
    #==============================================================================
    
    Story = [Spacer(1,1*mm)]
    plotSummary (Story, filename, dispvis, onTarget=False)
    # plotQCSummary (Story, dispvis, 'HIERARCH ESO QC DISP *')
    
    #==============================================================================
    # Summary of reduction parameters
    #==============================================================================

    plotReductionSummary(Story, dispvis)
    Story.append(PageBreak())

    #==============================================================================
    # Versus file
    #==============================================================================
    plotTitle(Story,"GDELAY - OPD_MET_FC * coeff")
    plotSubtitle(Story,"Residual in [um] versus FILE number  (color = baseline)")

    yval = dispvis.gdelay_delta * 1e6
    ymin = np.min(yval)
    ymax = np.max(yval)
    ticky = round_to_n((ymax-ymin)/5)

    xval = np.arange(dispvis.nobs)
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = 5
            
    data = []
    for base in range(0,6):
        data.append( tuple(zip(xval, yval[:,base]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin-ticky,ymax+ticky,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(Spacer(1,10*mm))
    
    #==============================================================================
    plotTitle(Story,"VISAMP, median of channels 400-450")
    plotSubtitle(Story,"Visibility amplitude versus FILE number  (color = baseline)")
    
    yval = np.median(dispvis.visamp[:,:,400:450], axis=2)
    ymax = 1.2
    ymin = 0.0
    ticky = 0.2

    xval = np.arange(dispvis.nobs)
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = 5
            
    data = []
    for base in range(0,6):
        data.append( tuple(zip(xval, yval[:,base]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin,ymax,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(Spacer(1,10*mm))

    #==============================================================================
    plotTitle(Story,"LKDT_MET_FC - LKDT_MET_FC of first file")
    plotSubtitle(Story,"Lock time [s] versus FILE number  (color = beam)")
    
    yval =  (dispvis.lkdt_met - dispvis.lkdt_met[0,:][None,:])*24*3600 + np.arange(0,ntel)[None,:]
    ymin = np.min(yval)
    ymax = np.max(yval)
    ticky = round_to_n((ymax-ymin)/5)

    xval = np.arange(dispvis.nobs)
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = 5
            
    data = []
    for tel in range(0,4):
        data.append( tuple(zip(xval, yval[:,tel]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin-ticky,ymax+ticky,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(PageBreak())

    #==============================================================================
    # Versus OPD_MET_FC
    #==============================================================================
    plotTitle(Story,"GDELAY - OPD_MET_FC * coeff")
    plotSubtitle(Story,"Residual in [um] versus OPD_MET_FC [um]  (color = baseline)")

    yval = dispvis.gdelay_delta * 1e6
    ymin = np.min(yval)
    ymax = np.max(yval)
    ticky = round_to_n((ymax-ymin)/5)

    xval = dispvis.opd_met * 1e6
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = round_to_n((xmax-xmin)/5)
            
    data = []
    for base in range(0,6):
        data.append( tuple(zip(xval[:,base], yval[:,base]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin-ticky,ymax+ticky,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(Spacer(1,10*mm))
    
    #==============================================================================
    plotTitle(Story,"VISAMP, median of channels 400:450")
    plotSubtitle(Story,"Visibility amplitude versus OPD_MET_FC [um]  (color = baseline)")
    
    yval = np.median(dispvis.visamp[:,:,400:450], axis=2)
    ymax = 1.2
    ymin = 0.0
    ticky = 0.2

    xval = dispvis.opd_met * 1e6
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = round_to_n((xmax-xmin)/5)
            
    data = []
    for base in range(0,6):
        data.append( tuple(zip(xval[:,base], yval[:,base]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin,ymax,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(Spacer(1,10*mm))

    #==============================================================================
    plotTitle(Story,"VISAMP, median of channels 1500:1550")
    plotSubtitle(Story,"Visibility amplitude versus OPD_MET_FC [um]  (color = baseline)")
    
    yval = np.median(dispvis.visamp[:,:,1500:1550], axis=2)
    ymax = 1.2
    ymin = 0.0
    ticky = 0.2

    xval = dispvis.opd_met * 1e6
    xmin = np.min(xval)
    xmax = np.max(xval)
    tickx = round_to_n((xmax-xmin)/5)
            
    data = []
    for base in range(0,6):
        data.append( tuple(zip(xval[:,base], yval[:,base]) ))
    a = graphscatteraxes(data,xmin,xmax,'%.2f',ymin,ymax,'%.2e',hsize,vsize,tickx,ticky,5,None)
    Story.append(a)
    Story.append(Spacer(1,10*mm))
        
        
    #==============================================================================
    # Create PDF report from Story
    #==============================================================================
    print("Create the PDF")
    
    gravi_visual_class.TITLE    = "GRAVITY "+datatype+" Quality Control Report"
    gravi_visual_class.PAGEINFO = datatype+" file: "+filename+".fits"
    reportname = filename+"-DISPVIS.pdf"
    
    doc = SimpleDocTemplate(reportname)
    doc.build(Story, onFirstPage=myFirstPage, onLaterPages=myLaterPages)

    print((" "+reportname)) 

