File size: 4,211 Bytes
ba35c8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Main application logic
document.addEventListener('DOMContentLoaded', () => {
    // Initialize tooltips
    const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // Lineup management logic
    const lineupSlots = document.querySelectorAll('custom-lineup-slot');
    let currentLineup = {
        QB: null,
        RB1: null,
        RB2: null,
        WR1: null,
        WR2: null,
        WR3: null,
        TE: null,
        FLEX: null,
        DST: null
    };
    let remainingSalary = 50000;

    // Function to update salary display
    function updateSalaryDisplay() {
        const usedSalary = Object.values(currentLineup).reduce((sum, player) => {
            return sum + (player ? player.salary : 0);
        }, 0);
        
        remainingSalary = 50000 - usedSalary;
        
        document.querySelector('[data-used-salary]').textContent = `$${usedSalary}`;
        document.querySelector('[data-remaining-salary]').textContent = `$${remainingSalary}`;
        
        const salaryBar = document.querySelector('.salary-progress-bar');
        const percentage = (usedSalary / 50000) * 100;
        salaryBar.style.width = `${percentage}%`;
        salaryBar.className = `salary-progress-bar h-2.5 rounded-full ${
            percentage > 95 ? 'bg-red-500' : 
            percentage > 85 ? 'bg-yellow-500' : 'bg-green-500'
        }`;
    }

    // Event delegation for player selection
    document.addEventListener('click', (e) => {
        if (e.target.closest('.select-player-btn')) {
            const playerCard = e.target.closest('custom-player-card');
            const playerData = {
                id: playerCard.getAttribute('data-id'),
                name: playerCard.getAttribute('name'),
                team: playerCard.getAttribute('team'),
                position: playerCard.getAttribute('position'),
                salary: parseInt(playerCard.getAttribute('salary')),
                fppg: parseFloat(playerCard.getAttribute('fppg')),
                image: playerCard.getAttribute('image')
            };

            // Find the appropriate slot
            let slotPosition = playerData.position;
            if (slotPosition === 'RB' || slotPosition === 'WR' || slotPosition === 'TE') {
                // Check if FLEX is available
                const flexSlot = Array.from(lineupSlots).find(slot => 
                    slot.getAttribute('position') === 'FLEX' && !slot.hasAttribute('filled')
                );
                if (flexSlot) {
                    slotPosition = 'FLEX';
                }
            }

            const targetSlot = Array.from(lineupSlots).find(slot => 
                slot.getAttribute('position') === slotPosition && !slot.hasAttribute('filled')
            );

            if (targetSlot && remainingSalary >= playerData.salary) {
                targetSlot.setAttribute('filled', '');
                targetSlot.setAttribute('player-name', playerData.name);
                targetSlot.setAttribute('player-team', playerData.team);
                targetSlot.setAttribute('player-salary', playerData.salary);
                targetSlot.setAttribute('player-image', playerData.image);
                
                // Update current lineup
                const slotKey = targetSlot.getAttribute('position');
                currentLineup[slotKey] = playerData;
                
                updateSalaryDisplay();
            }
        }

        // Handle removing players from lineup
        if (e.target.closest('.remove-player-btn')) {
            const slot = e.target.closest('custom-lineup-slot');
            const slotPosition = slot.getAttribute('position');
            
            slot.removeAttribute('filled');
            slot.removeAttribute('player-name');
            slot.removeAttribute('player-team');
            slot.removeAttribute('player-salary');
            slot.removeAttribute('player-image');
            
            currentLineup[slotPosition] = null;
            updateSalaryDisplay();
        }
    });
});