import json,copy,uuid
from pathlib import Path
import fastjsonschema
r=Path(__file__).resolve().parent
s=json.load(open(r/'CVH_Liver_dynseq.both_signs.gosling.json'))
replacements=[];out=[]
for t in s['tracks']:
 if '.dynseq.bgz' not in t.get('data',{}).get('url',''):out.append(t);continue
 if t['dataTransform'][0]['oneOf']==[-1]:continue
 t=copy.deepcopy(t);t['title']=t['title'].replace('positive importance (magnitude)','signed importance (+/−)')
 m=t['y']['domain'][1];h=t['height'];t['y']={'field':'score','type':'quantitative','domain':[-m,m],'axis':'right','zeroBaseline':False}
 t['ye']={'field':'zero','type':'quantitative'}
 t['dataTransform']=[{'type':'genomicLength','startField':'chromStart','endField':'chromEnd','newField':'unit'},{'type':'log','field':'unit','newField':'zero'}]
 t['dataTransform'] += [
  {'type':'replace','field':'strand','newField':'signPrefix','replace':[{'from':'-1','to':'-'},{'from':'1','to':''}]},
  {'type':'concat','fields':['signPrefix','score'],'separator':'','newField':'signedScore'}]
 t['y']['field']='signedScore'
 t['tooltip']=[x for x in t['tooltip'] if x['field']!='strand']
 for tip in t['tooltip']:
  if tip['field']=='score':tip['field']='signedScore';tip['alt']='Signed contribution'
 t['tracks']=[
  {'id':str(uuid.uuid5(uuid.NAMESPACE_URL,t['id']+'/signedBars')),'mark':'bar'},
  *[{'id':str(uuid.uuid5(uuid.NAMESPACE_URL,t['id']+f'/baseLabels/{sign}')),'mark':'text','dataTransform':[{'type':'filter','field':'strand','oneOf':[sign]}],'text':{'field':'name','type':'nominal'},'size':{'value':12},'style':{'textFontWeight':'bold','dy':8*sign},'visibility':[{'target':'track','measure':'zoomLevel','operation':'ltet','threshold':150}]} for sign in [1,-1]],
  {'id':str(uuid.uuid5(uuid.NAMESPACE_URL,t['id']+'/zero')),'mark':'rule','y':{'field':'zero','type':'quantitative','domain':[-m,m],'zeroBaseline':False,'axis':'none'},'color':{'value':'#777777'},'strokeWidth':{'value':.6}}]
 out.append(t);replacements.append(t)
s['tracks']=out
validate=fastjsonschema.compile(json.load(open('/tmp/gosling.schema.json')));validate(s)
(r/'CVH_Liver_dynseq.combined.gosling.json').write_text(json.dumps(s,indent=2)+'\n')
s['xDomain']['interval']=[73446530,73446580];validate(s)
(r/'CVH_Liver_dynseq.combined.closeup.gosling.json').write_text(json.dumps(s,indent=2)+'\n')
(r/'replacement_tracks.combined.json').write_text(json.dumps(replacements,indent=2)+'\n')
