package me.despawningbone.selfbot;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.platform.win32.WinDef.HWND;

import club.minnced.discord.rpc.DiscordEventHandlers;
import club.minnced.discord.rpc.DiscordRPC;
import club.minnced.discord.rpc.DiscordRichPresence;

import com.sun.jna.platform.win32.User32;

public class DiscordBot {
	
	public static String prevTitle = "";	
	public static DiscordRichPresence prevPresence = new DiscordRichPresence();
	public static boolean cleared = false;
	
	public static void main(String[] args) {
		
		DiscordRPC lib = DiscordRPC.INSTANCE;
        String applicationId = "542685911607934986";
        String steamId = "";
        DiscordEventHandlers handlers = new DiscordEventHandlers();
        handlers.ready = (user) -> System.out.println("Ready!");
        lib.Discord_Initialize(applicationId, handlers, true, steamId);
        new Thread(() -> {
        	while(true) {
            	lib.Discord_RunCallbacks();
                String temp = "";
                if(Platform.isWindows()) {
                	char[] buffer = new char[2048];
                	HWND hwnd = User32.INSTANCE.GetForegroundWindow();
        			User32.INSTANCE.GetWindowText(hwnd, buffer, 1024);
        			temp = Native.toString(buffer);
                } else if(Platform.isMac()) {
                	final String[] script = {"osascript", "-e", "tell application \"System Events\"", "-e", "tell (first process whose frontmost is true) to return name of window 1", "-e", "end tell"};
                	try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec(script).getInputStream()))) {
                		String buffer = null;
                		while ((buffer = bufferedReader.readLine()) != null) {
                			temp = buffer;
                			System.out.println(temp);
                		}
					} catch (IOException e) {
						e.printStackTrace();
					}
                }
    			try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {e.printStackTrace();}
    			if(temp.contains("- Watch Anime") || temp.contains("Online Sub - AnimeKisa")) {
    				if(temp.contains("AnimeKisa")) {
    					String title = temp.substring(6).split(" Online Sub - AnimeKisa")[0];
    					if(!prevTitle.equals(title)) {
    						System.out.println(title);
    						String[] split = title.split("Episode");
    						String epi = "Episode" + split[1];   //animekisa puts everything with episode
    						String name = split[0];
    						DiscordRichPresence presence = new DiscordRichPresence();
            				presence.details = name;
            				if(!epi.isEmpty()) presence.state = epi;
            				presence.largeImageKey = "animekisa";
            				presence.largeImageText = "animekisa";
            		        //presence.startTimestamp = System.currentTimeMillis() / 1000; // epoch second
            				System.out.println(presence.details);
            				System.out.println(presence.state);
            		        //presence.details = "";
            		        lib.Discord_UpdatePresence(presence);
            		        prevTitle = title;
            		        prevPresence = presence;
            		        cleared = false;
    					}
    				} else {
    					String title = temp.split("- Watch Anime")[0];
        				if(!prevTitle.equals(title)) {
        					System.out.println(title);
        					String[] split = title.split("Episode");
        					String epi = "";
        					String name = split[0];
        					if(!temp.contains("- Watch Anime Movie Online English Subbed")) {
        						if(split.length < 2) continue;   //theres no reason for it to not have episodes if its not movie
        						epi = "Episode" + split[1];
        					} else {
        						epi = "Anime Movie";
        					}
            				DiscordRichPresence presence = new DiscordRichPresence();
            				presence.details = name;
            				if(!epi.isEmpty()) presence.state = epi;
            				presence.largeImageKey = "otakustream";
            				presence.largeImageText = "OtakuStream";
            		        //presence.startTimestamp = System.currentTimeMillis() / 1000; // epoch second
            				System.out.println(presence.details);
            				System.out.println(presence.state);
            		        //presence.details = "";
            		        lib.Discord_UpdatePresence(presence);
            		        prevTitle = title;
            		        prevPresence = presence;
            		        cleared = false;
            			}
    				}
    					
    			} else {
    				if(!cleared && !temp.contains(" - Discord") && !temp.contains("工作切換") && !temp.contains("Picture-in-Picture")) {
    					lib.Discord_ClearPresence();
    					cleared = true;
    					prevTitle = "";
    				}
    				/*if(prevPresence.details != null && !prevPresence.details.equals("Idle")) {
    					DiscordRichPresence presence = new DiscordRichPresence();
        				presence.details = "Idle";
        				presence.largeImageKey = "otakustream";
        				presence.largeImageText = "OtakuStream";
        				lib.Discord_UpdatePresence(presence);
        				prevPresence = presence;
    				}*/
    			}
        	}
        }, "RPC-Callback-Handler").start();
		
		
	}
}
