#---- snakebids boilerplate

import snakebids
from snakebids import bids

configfile: 'config/snakebids.yml'

#make adjustments to input params:
# right now hippb500 or cropseg cannot use T1w output space
if ('hippb500' in config['modality']) or ('cropseg' in config['modality']): 
    config['output_spaces'] = ['corobl']


#get list of inputs to limit to (T1w + modalities)
limit_to_list = set()
if 'cropT1w' in config['output_spaces']:
    limit_to_list.add('T1w') 


for modality in config['modality']:
    if modality[:3] == 'seg': #if modality is segT2w, then add seg and T2w
        limit_to_list.add('seg')
        limit_to_list.add(modality[3:])
    else:
        limit_to_list.add(modality)


#writes inputs_config.yml and updates config dict
config.update(snakebids.generate_inputs(bids_dir=config['bids_dir'],
                            pybids_inputs=config['pybids_inputs'],
                            derivatives=config['derivatives'],
                            participant_label=config['participant_label'],
                            exclude_participant_label=config['exclude_participant_label'],
                            limit_to=list(limit_to_list)))

#this adds constraints to the bids naming
wildcard_constraints:  **snakebids.get_wildcard_constraints(config['pybids_inputs'])

#----
wildcard_constraints:
    desc='[a-zA-Z0-9]+',
    space='[a-zA-Z0-9]+',
    hemi='[a-zA-Z0-9]+',
    surfname='[a-zA-Z0-9]+',
    modality='[a-zA-Z0-9]+',


include: 'rules/common.smk'
include: 'rules/preproc_t1.smk'

#include rules only as they are needed..
if 'segT1w' in config['modality'] or 'segT2w' in config['modality']:
    include: 'rules/preproc_seg.smk'
elif 'cropseg' in config['modality']:
    include: 'rules/preproc_cropseg.smk'
else: 
    include: 'rules/nnunet.smk'


#if using manual segs, then don't use nnunet
if 'segT2w' in config['modality'] or 'T2w' in config['modality']:
    include: 'rules/preproc_t2.smk'

if 'dwi' in config['modality']:
    include: 'rules/preproc_dwi.smk'

if 'hippb500' in config['modality']:
    include: 'rules/preproc_hippb500.smk'

include: 'rules/autotop.smk'
include: 'rules/shape_inject.smk'
include: 'rules/gifti.smk'
include: 'rules/subfields.smk'
include: 'rules/resample_final_to_crop_t1.smk'
  
rule all:
    input: 
        get_final_output()


rule all_group_tsv:
    input: 
        tsv = expand(bids(root='results',prefix='group',from_='{modality}',desc='subfields',suffix='volumes.tsv'),
                    modality=config['modality'])




