import { NodeType, useNodeMessages } from "@/lib/state";
import { Icon } from "./icon";
import { useEffect, useState } from "react";

export type Props = {
    id: string;
    selected?: boolean;
    children: any;
    type: NodeType;
    state: string | null;
};

export function NodeRect(p: Props) {
    const { id, selected, children, state } = p;
    const messages = useNodeMessages(id);
    const hasFatal = messages.some((m) => m.type === "FATAL");
    const hasWarning = messages.some((m) => m.type === "WARNING");
    const [classes, setClasses] = useState<string[]>([]);
    const [stateClasses, setStateClasses] = useState<string[]>([]);
    useEffect(() => {
        const classes = ["px-4", "py-2", "rounded-md", "bg-white"];
        if (hasFatal) {
            classes.push("border-red-500");
        } else if (hasWarning) {
            classes.push("border-yellow-500");
        } else {
            classes.push("border-black");
        }
        if (selected) {
            classes.push("border-2");
        } else {
            classes.push("border");
        }
        setClasses(classes);
        let stateClasses: string[] = [];
        if (state === "processing") {
            stateClasses.push("bg-yellow-500");
            stateClasses.push("animate-pulse");
        } else if (state === "success") {
            stateClasses.push("bg-green-500");
        } else if (state === "failure") {
            stateClasses.push("bg-red-500");
        } else {
            stateClasses.push("bg-black");
        }
        setStateClasses(stateClasses);
    }, [selected, hasFatal, hasWarning, state, setClasses, setStateClasses]);
    return (
        <div className={classes.join(" ")}>
            <div style={{ position: "absolute", top: "5px", left: "5px" }}>
                {Icon(p.type)}
            </div>
            <div style={{ position: "absolute", top: "5px", right: "5px", borderRadius: "50%", width: "5px", height: "5px" }} className={stateClasses.join(" ")}>
            </div>
            {children}
        </div>
    )

}
