#!/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()

gtf = data_processing.Gtf_helper(parameters.config['gtf_file'])

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)
