# Test workflow with checkpoint followed by processing and aggregation
# Tests: checkpoint re-evaluation, dynamic job creation, aggregation

import os

checkpoint discover_samples:
    """Checkpoint that discovers samples dynamically."""
    output: directory("output/discovered")
    shell:
        """
        mkdir -p {output}
        for s in sample_1 sample_2 sample_3; do
            echo "$s data" > {output}/$s.txt
        done
        """

rule process_sample:
    """Process each discovered sample."""
    input: "output/discovered/{sample}.txt"
    output: "output/processed/{sample}.done"
    shell:
        """
        mkdir -p output/processed
        echo "Processing {wildcards.sample}" > {output}
        cat {input} >> {output}
        """

rule analyze_sample:
    """Analyze each processed sample."""
    input: "output/processed/{sample}.done"
    output: "output/analyzed/{sample}.txt"
    shell:
        """
        mkdir -p output/analyzed
        echo "Analysis of {wildcards.sample}" > {output}
        wc -l {input} >> {output}
        """

def get_all_analyzed(wildcards):
    """Aggregate all analyzed samples."""
    discovered_dir = checkpoints.discover_samples.get(**wildcards).output[0]
    samples = glob_wildcards(os.path.join(discovered_dir, "{sample}.txt")).sample
    return expand("output/analyzed/{sample}.txt", sample=samples)

rule aggregate:
    """Final aggregation of all analyzed samples."""
    input: get_all_analyzed
    output: "output/final_report.txt"
    shell: "cat {input} > {output}"

rule all:
    input: "output/final_report.txt"
