// Path: src/main/java/Constants/Assets.java
// public class Assets {
//     public static final String PLAY = "/media-play-6x.png";
//     public static final String PAUSE = "/media-pause-6x.png";
//     public static final String STOP = "/media-stop-6x.png";
//     public static final String PLAY_PRESSED = "/pressed/media-play-6x.png";
//     public static final String PAUSE_PRESSED = "/pressed/media-pause-6x.png";
//     public static final String STOP_PRESSED = "/pressed/media-stop-6x.png";
// }
// 
// Path: src/main/java/Constants/PlayStates.java
// public class PlayStates {
//     public static final String PLAY = "play";
//     public static final String PAUSE = "pause";
//     public static final String STOP = "stop";
// }
// 
// Path: src/main/java/SystemCommands/Song.java
// public class Song {
//     private final String title;
//     private final String artist;
//     private final String album;
//     private final String url;
//     private final String imageURL;
//     private final int duration;
// 
//     public Song(String title, String artist, String album, String url, String imageURL, int duration) {
//         this.title = title;
//         this.artist = artist;
//         this.album = album;
//         this.url = url;
//         this.imageURL = imageURL;
//         this.duration = duration;
//     }
//     
//     public Song(String title){
//         this.title = title;
//         this.artist = "";
//         this.album = "";
//         this.url = "";
//         this.imageURL = "";
//         this.duration = 0;
//     }
//     
//     public String getTitle(){
//         return this.title;
//     }
// 
//     public String getArtist() {
//         return this.artist;
//     }
// 
//     public String getAlbum() {
//         return this.album;
//     }
// 
//     public String getUrl() {
//         return this.url;
//     }
//     
//     public String getMediaURL() {
//         return this.imageURL;
//     }
//     
//     public int getDuration() {
//         return this.duration;
//     }
// }


import Constants.Assets;
import Constants.PlayStates;
import SystemCommands.Song;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
        this.timePassedLabel = timePassedLabel;
        this.songDurationLabel = songDurationLabel;
        this.loadAssets();
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        String changedPropertyName = evt.getPropertyName();

        switch (changedPropertyName) {
            case ObservablePropertyNames.PLAYSTATE:
                String newState = (String) evt.getNewValue();
                this.setPlayButtonState(newState);
                break;
            case ObservablePropertyNames.SONGPROGRESS:
                int newProgress = (int) evt.getNewValue();
                this.songProgressBar.setValue(newProgress);
                String formattedProgress = this.formattedTime(newProgress);
                this.timePassedLabel.setText(formattedProgress);
                break;
            case ObservablePropertyNames.NOWPLAYING:
                int newDuration = ((Song) evt.getNewValue()).getDuration();
                this.songProgressBar.setMaximum(newDuration);
                String formattedDuration = this.formattedTime(newDuration);
                this.songDurationLabel.setText(formattedDuration);
            default:
                break;
        }
    }

// Path: src/main/java/Constants/Assets.java
// public class Assets {
//     public static final String PLAY = "/media-play-6x.png";
//     public static final String PAUSE = "/media-pause-6x.png";
//     public static final String STOP = "/media-stop-6x.png";
//     public static final String PLAY_PRESSED = "/pressed/media-play-6x.png";
//     public static final String PAUSE_PRESSED = "/pressed/media-pause-6x.png";
//     public static final String STOP_PRESSED = "/pressed/media-stop-6x.png";
// }
// 
// Path: src/main/java/Constants/PlayStates.java
// public class PlayStates {
//     public static final String PLAY = "play";
//     public static final String PAUSE = "pause";
//     public static final String STOP = "stop";
// }
// 
// Path: src/main/java/SystemCommands/Song.java
// public class Song {
//     private final String title;
//     private final String artist;
//     private final String album;
//     private final String url;
//     private final String imageURL;
//     private final int duration;
// 
//     public Song(String title, String artist, String album, String url, String imageURL, int duration) {
//         this.title = title;
//         this.artist = artist;
//         this.album = album;
//         this.url = url;
//         this.imageURL = imageURL;
//         this.duration = duration;
//     }
//     
//     public Song(String title){
//         this.title = title;
//         this.artist = "";
//         this.album = "";
//         this.url = "";
//         this.imageURL = "";
//         this.duration = 0;
//     }
//     
//     public String getTitle(){
//         return this.title;
//     }
// 
//     public String getArtist() {
//         return this.artist;
//     }
// 
//     public String getAlbum() {
//         return this.album;
//     }
// 
//     public String getUrl() {
//         return this.url;
//     }
//     
//     public String getMediaURL() {
//         return this.imageURL;
//     }
//     
//     public int getDuration() {
//         return this.duration;
//     }
// }


// Path: src/main/java/Gui/Observers/ControlsObserver.java
import Constants.Assets;
import Constants.PlayStates;
import SystemCommands.Song;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

        this.timePassedLabel = timePassedLabel;
        this.songDurationLabel = songDurationLabel;
        this.loadAssets();
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        String changedPropertyName = evt.getPropertyName();

        switch (changedPropertyName) {
            case ObservablePropertyNames.PLAYSTATE:
                String newState = (String) evt.getNewValue();
                this.setPlayButtonState(newState);
                break;
            case ObservablePropertyNames.SONGPROGRESS:
                int newProgress = (int) evt.getNewValue();
                this.songProgressBar.setValue(newProgress);
                String formattedProgress = this.formattedTime(newProgress);
                this.timePassedLabel.setText(formattedProgress);
                break;
            case ObservablePropertyNames.NOWPLAYING:
                int newDuration = ((Song) evt.getNewValue()).getDuration();
                this.songProgressBar.setMaximum(newDuration);
                String formattedDuration = this.formattedTime(newDuration);
                this.songDurationLabel.setText(formattedDuration);
            default:
                break;
        }
    }

    public void setPlayButtonState(String state) {