declare module "dps_canvas";

interface BaseSettings {
  ctx: CanvasRenderingContext2D;
  width?: number;
  height?: number;
}

interface SquareSettings {
  width: number;
  height?: number;
  color: string;
  x: number;
  y: number;
  name: string;
}

interface CircleSettings {
  radius: number;
  color: string;
  x: number;
  y: number;
  name: string;
}

interface BaseActiveOptions {
  gap: number,
  cornerSize: number,
  cornerColor: string,
  sideColor: string,
  cornerLength: number,
  dashed: boolean
}

export declare class Base {
  constructor(settings: BaseSettings);

  static fillCanvas: string;
  static coordinate: { squares: SquareSettings[]; circles: CircleSettings[] };

  /**
   * Canvas 'da hangi işlemin yapılacağını belirler
   * @type {"creating" | "moving"}
   */
  static process: "creating" | "moving";

  /**
   * Canvas üzerine çizilecek olan şeklin tipini belirler
   * @type {"square" |"circle"}
   */
  static status: "square" | "circle";

  /**
   * Canvas üzerindeki yetkilendirmeleri belirler
   * @type {"onlyView" | "admin"}
   */
  static permission: "onlyView" | "admin";

  /**
   * @type {BaseActiveOptions}
   */
  static activeOptions: BaseActiveOptions;
  
  static squareColor: string;
  static circleColor: string;
  static clearAll(): void;
  static drawAll(): void;
  static deleteShape(draw?: Boolean): void;
  static setActiveShape(shape?: SquareSettings | CircleSettings): void;
  static setInput(entity: "style" | "prop", options: CSSStyleDeclaration | HTMLInputElement): void;
}

export declare class Square {
  /**
   * Canvas üzerine kare şekilller eklemek için kullanılır
   *
   * @param {SquareSettings} settings Canvas üzerine çizilecek olan şeklin özellikleri
   */
  static add(settings: SquareSettings): void;
}

export declare class Circle {
  /**
   * Canvas üzerine daire şekilller eklemek için kullanılır
   *
   * @param {CircleSettings} params Canvas üzerine çizilecek olan şeklin özellikleri
   */
  static add(params: CircleSettings): void;
}
