/**
 * Represents a rectangular region on the screen.
 * Used for targeted screen capture and element location.
 */
export interface ScreenRegion {
  x: number;
  y: number;
  width: number;
  height: number;
}

/**
 * Represents a point on the screen with x,y coordinates.
 */
export interface Point {
  x: number;
  y: number;
}

/**
 * Represents the location of a detected UI element on screen.
 * Contains the center point, bounding box, and confidence score.
 */
export interface ElementLocation {
  center: Point;
  bounds: ScreenRegion;
  confidence: number;
}

/**
 * Result of login state detection via screen recognition.
 */
export interface LoginDetectionResult {
  isLoggedIn: boolean;
  confidence: number;
  detectedIndicators: string[];
  error?: string;
}

/**
 * Create a ScreenRegion from coordinates.
 */
export function createScreenRegion(x: number, y: number, width: number, height: number): ScreenRegion {
  return { x, y, width, height };
}

/**
 * Create a Point from coordinates.
 */
export function createPoint(x: number, y: number): Point {
  return { x, y };
}

/**
 * Calculate the center point of a ScreenRegion.
 */
export function getRegionCenter(region: ScreenRegion): Point {
  return {
    x: region.x + Math.floor(region.width / 2),
    y: region.y + Math.floor(region.height / 2),
  };
}

/**
 * Check if a point is within a screen region.
 */
export function isPointInRegion(point: Point, region: ScreenRegion): boolean {
  return (
    point.x >= region.x &&
    point.x <= region.x + region.width &&
    point.y >= region.y &&
    point.y <= region.y + region.height
  );
}

/**
 * Check if two screen regions overlap.
 */
export function regionsOverlap(a: ScreenRegion, b: ScreenRegion): boolean {
  return !(
    a.x + a.width < b.x ||
    b.x + b.width < a.x ||
    a.y + a.height < b.y ||
    b.y + b.height < a.y
  );
}