#!/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']) and 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_genomic_axis']:
    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['page_width']) < 10 and (parameters.config['show_nt_seq_track'] == 'auto'):
    parameters.config['show_nt_seq_track'] = 0

if (parameters.config['show_nt_seq_track'] == 'auto' and (end - start) < 160) or parameters.config['show_nt_seq_track'] == 1:
    parameters.config['show_nt_seq_track'] = 1
else:
    parameters.config['show_nt_seq_track'] = 0




if parameters.config['show_nt_seq_track'] != 0:
    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['paired_bedgraph'] != []:
    Paired_bedgraph = manager.Paired_bedgraph_tracks_maker(parameters)
    tracks += Paired_bedgraph.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)

