#!/usr/bin/python3


import svist4get.data_processing as data_processing
import svist4get.drawing as drawing
import svist4get.methods as methods
import svist4get.manager as manager
import svist4get.copier as copier

parameters = manager.Parameters()
parameters.parse_command_line()
parameters.load_config(parameters.cmd['path_to_config'])
parameters.load_palette()
parameters.load_triplet_code()
parameters.load_font()
parameters.update_config()
parameters.create_pdf()

if parameters.config['transcript_id'] == 0 and parameters.config['gene_id'] == 0 and parameters.config[window] == [0]:
    print('Parameter -t or -g or -w missing. Please consult the program manual or use -h.')
    exit()

if parameters.config['fasta_file'] == 0 or parameters.config['gtf_file'] == 0:
    print('Parameter -f or -gtf missing. Please consult the program manual or use -h.')
    exit()
gtf = data_processing.Gtf_helper(parameters.config['gtf_file'])


try:

    if parameters.config['data']:
        copier.copy()
    else:

        if parameters.config['gene_id'] != 0:
            coordinates = gtf.extract_window_from_gene_id(parameters.config['gene_id'])

            parameters.config['window'] = coordinates

        if parameters.config['window'][0] != 0 and parameters.config['window'][0] != 'tis' and parameters.config['window'][
            0] != 'tss':
            coordinates = parameters.config['window']
            transcripts = gtf.extract_transcripts_from_widnow(*coordinates, parameters.config['selected_transcripts'])
            data_from_gtf = (gtf.extract_data_about_transcripts(transcripts))

        elif parameters.config['window'][0] == 'tis' or parameters.config['window'][0] == 'tss':
            data_from_gtf = gtf.extract_data_around_ts(parameters.config['transcript_id'], parameters.config['window'],
                                                       parameters.config['selected_transcripts'])

        else:
            data_from_gtf = (gtf.extract_data_about_transcripts(parameters.config['transcript_id']))

        parameters.add_gtf_data(data_from_gtf)

        tracks = []

        if parameters.config['show_title']:
            Title = manager.Title_tracks_maker(parameters)
            tracks += Title.create_tracks()

        if parameters.config['show_axis_x_tics']:
            Axis_tics = manager.Axis_tics_tracks_maker(parameters)
            tracks += Axis_tics.create_tracks()

        Vgrid = manager.Vgrid_tracks_maker(parameters)
        tracks += Vgrid.create_tracks()

        start = parameters.gtf['start']
        end = parameters.gtf['end']

        if parameters.config['nucleotide_sequence'] == 0 and (end - start) < 160:
            parameters.config['nucleotide_sequence'] = 1

        if parameters.config['nucleotide_sequence'] and parameters.config['zoom_level'] != 'close':
            Nt_seq = manager.Nt_seq_tracks_maker(parameters)
            tracks += Nt_seq.create_tracks()

        Transcript_struct = manager.Transcript_struct_tracks_maker(parameters)
        tracks += Transcript_struct.create_tracks()

        if parameters.config['bedgraph'] != '':
            Bedgraph = manager.Bedgraph_tracks_maker(parameters)
            tracks += Bedgraph.create_tracks()

        Regions = manager.Genomic_intervals_tracks_maker(parameters)
        tracks += Regions.create_tracks()

        if parameters.config['show_aa_seq_track']:
            Aa_seq = manager.Aa_seq_tracks_maker(parameters)
            tracks += Aa_seq.create_tracks()

        graph = manager.Image(tracks, parameters)
        graph.go()

        if parameters.config['highlight_frame'] != 0:
            graph.highlighting_the_frame()

        graph.save()

        methods.pdf_page_to_png(parameters)

except:
    print('Invalid command line format. Please consult the program manual or use -h')
