#!/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
import sys

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['data']:
    copier.copy()
    sys.exit()

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

if parameters.config['fasta_file'] == 0:
    sys.exit('Parameter -fa missing. Please consult the program manual or use -h.')


if parameters.config['gtf_file'] == 0:
    sys.exit('Mandatory parameter -gtf is missing. Please consult the program manual or use -h.')

if len(parameters.config['genomic_intervals']) != len(parameters.config['genomic_intervals_label']):
    sys.exit('Number of -gi and -gil parameters must be equal. Please consult the program manual or use -h.')


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

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)

