File size: 1,272 Bytes
16e4ad5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""Application state for the Pigeon Pea Pangenome Atlas."""

from dataclasses import dataclass, field


@dataclass
class AppState:
    selected_line: str | None = None
    selected_party: list[str] = field(default_factory=list)
    selected_gene: str | None = None
    backpack_genes: list[str] = field(default_factory=list)
    core_threshold: float = 95.0
    cloud_threshold: float = 15.0
    selected_contig: str | None = None
    achievements: set[str] = field(default_factory=set)

    def add_to_backpack(self, gene_id: str) -> bool:
        """Add gene to backpack. Returns True if added, False if already present or full."""
        if gene_id in self.backpack_genes:
            return False
        if len(self.backpack_genes) >= 50:
            return False
        self.backpack_genes.append(gene_id)
        if len(self.backpack_genes) >= 5:
            self.achievements.add("Collector")
        return True

    def remove_from_backpack(self, gene_id: str) -> bool:
        """Remove gene from backpack."""
        if gene_id in self.backpack_genes:
            self.backpack_genes.remove(gene_id)
            return True
        return False

    def award(self, badge: str):
        """Award an achievement badge."""
        self.achievements.add(badge)