import com.google.api.client.googleapis.auth.oauth2.Credential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.http.HttpRequest;
import com.google.api.client.googleapis.http.HttpRequestInitializer;
import com.google.api.client.googleapis.json.JsonFactory;
import com.google.api.client.goolgeapis.json.jackson2.JacksonFactory;
import com.google.api.services.youtube.YouTube;
import com.google.api.services.youtube.model.LiveChatMessage;
import com.google.api.services.youtube.model.LiveChatMessageListResponse;
import com.google.api.services.youtube.model.LiveChatMessageSnippet;
import com.google.api.services.youtube.model.LiveChatTextMessageDetails;
import com.google.api.services.youtube.model.LiveChatTextMessageDetails.MessageTextDetails;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.List;

public class MCchatbotyt {

    private static final String APPLICATION_NAME = "MC chatbot for YT";
    private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    private static YouTube youtube;

    public static void main(String[] args) throws GeneralSecurityException, IOException {
        // Set up credentials
        Credential credential = authorize();

        // Set up YouTube API client
        youtube = new YouTube.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                JSON_FACTORY,
                new HttpRequestInitializer() {
                    @Override
                    public void initialize(HttpRequest request) throws IOException {
                        request.setInterceptor(credential);
                    }
                })
                .setApplicationName(APPLICATION_NAME)
                .build();

        // Get live chat ID for your live stream
        String liveChatId = getLiveChatId("5lAKSeFQS2M");
        

        // Poll for new chat messages every few seconds
        while (true) {
            List<LiveChatMessage> messages = getLiveChatMessages(liveChatId);
            for (LiveChatMessage message : messages) {
                String author = message.getSnippet().getAuthorChannelId();
                String text = message.getSnippet().getDisplayMessage();
                System.out.println("New message from " + author + ": " + text);
                // Add your logic to handle incoming messages here
            }
            try {
                Thread.sleep(5000); // Poll every 5 seconds
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private static Credential authorize() throws IOException, GeneralSecurityException {
        // Load client secrets JSON file (you need to create this file with your OAuth client ID and secret)
        GoogleCredential credential = GoogleCredential.fromStream(
                YouTubeLiveChatBot.class.getResourceAsStream("/client_secrets.json"))
                .createScoped(List.of("https://www.googleapis.com/auth/youtube"));

        return credential;
    }

    private static String getLiveChatId(String liveStreamId) throws IOException {
        YouTube.LiveChatMessages.List liveChatRequest = youtube.liveChatMessages()
                .list("id,snippet")
                .setLiveChatId(liveStreamId);
        LiveChatMessageListResponse response = liveChatRequest.execute();
        List<LiveChatMessage> messages = response.getItems();
        if (messages != null && !messages.isEmpty()) {
            return messages.get(0).getSnippet().getLiveChatId();
        }
        return null;
    }

    private static List<LiveChatMessage> getLiveChatMessages(String liveChatId) throws IOException {
        YouTube.LiveChatMessages.List liveChatRequest = youtube.liveChatMessages()
                .list("id,snippet")
                .setLiveChatId(liveChatId);
        LiveChatMessageListResponse response = liveChatRequest.execute();
        return response.getItems();
    }
}
