docs: def main(input_bed, output_file, output_features=False, genome=None,
           only_canonical=False, short=False, extended=False, high_confidence=False,
           ambiguities_method=False, coding_only=False, collapse_exons=False, work_dir=False, is_debug=False):
      """ Annotating BED file based on reference features annotations.
      """
      logger.init(is_debug_=is_debug)
  
      if not genome:
          raise click.BadParameter('Error: please, specify genome build name with -g (e.g. `-g hg19`)', param='genome')
  
      if short:
          if extended:        raise click.BadParameter('--short and --extended can\'t be set both', param='extended')
          if output_features: raise click.BadParameter('--short and --output-features can\'t be set both', param='output_features')
      elif output_features or extended:
          extended = True
          short    = False
  
      if not verify_file(input_bed):
          click.BadParameter(f'Usage: {__file__} Input_BED_file -g hg19 -o Annotated_BED_file [options]', param='input_bed')
      input_bed = verify_file(input_bed, is_critical=True, description=f'Input BED file for {__file__}')
  
      if work_dir:
          work_dir = join(adjust_path(work_dir), os.path.splitext(basename(input_bed))[0])
          safe_mkdir(work_dir)
          info(f'Created work directory {work_dir}')
      else:
          work_dir = mkdtemp('bed_annotate')
          debug('Created temporary work directory {work_dir}')
  
      input_bed = clean_bed(input_bed, work_dir)
      input_bed = verify_bed(input_bed, is_critical=True, description=f'Input BED file for {__file__} after cleaning')
  
      output_file = adjust_path(output_file)
  
      output_file = annotate(
          input_bed, output_file, work_dir, genome=genome,
          only_canonical=only_canonical, short=short, extended=extended,
          high_confidence=high_confidence, collapse_exons=collapse_exons,
          output_features=output_features,
          ambiguities_method=ambiguities_method, coding_only=coding_only,
          is_debug=is_debug)
  
      if not work_dir:
          debug(f'Removing work directory {work_dir}')
          shutil.rmtree(work_dir)
  
      info(f'Done, saved to {output_file}')