/* eslint-disable no-alert */
import $ from 'jquery';
import { Workspace, Line, Group, Elipse } from '../../src';

global.$ = $;

const basicTest = () => {
  const workspace = new Workspace();
  workspace.setSize('150px', '150px');
  workspace.setCoordSize(100, 100);

  const group = new Group();
  group.setSize(50, 50);
  group.setPosition(25, 50);
  group.setCoordSize(200, 200);
  group.setCoordOrigin(0, 0);
  workspace.append(group);

  const elipse = new Elipse();
  elipse.setSize(200, 200);
  elipse.setPosition(100, 100);
  group.append(elipse);

  let line = new Line();
  line.setFrom(0, 0);
  line.setTo(200, 200);
  line.setStroke('blue');
  group.append(line);

  line = new Line();
  line.setFrom(200, 0);
  line.setTo(0, 200);
  line.setStroke('blue');
  group.append(line);

  workspace.addItAsChildTo($('#groupBasicContainer'));

  let xDir = 1;
  let yDir = 1;
  const executer = function () {
    const y = group.getPosition().y + yDir;
    const x = group.getPosition().x + xDir;

    if (x < 0) {
      xDir = 1;
    } else if (x > 50) {
      xDir = -1;
    }

    if (y < 0) {
      yDir = 1;
    } else if (y > 50) {
      yDir = -1;
    }

    //  Logger.logMsg("Moving group x,y:"+ x + "," + y);
    group.setPosition(x, y);
  };
  // executer.periodical(100);
};
basicTest();

const eventTest = () => {
  const workspace = new Workspace();
  workspace.setSize('150px', '150px');
  workspace.setCoordSize(100, 100);

  const groupAttributes = {
    width: 50,
    height: 50,
    x: 25,
    y: 50,
    coordSize: '200 200',
    coordOrigin: '0 0',
  };
  const group = new Group(groupAttributes);
  workspace.append(group);

  const elipseLeft = new Elipse();
  elipseLeft.setSize(200, 200);
  elipseLeft.setPosition(200, 0);
  group.append(elipseLeft);

  const elipseRight = new Elipse();
  elipseRight.setSize(200, 200);
  elipseRight.setPosition(0, 0);
  group.append(elipseRight);

  const listener = function listener() {
    alert(`Click event on:${this.getType()}`);
  };

  group.addEvent('click', listener);
  elipseLeft.addEvent('click', listener);
  elipseRight.addEvent('click', listener);

  workspace.addItAsChildTo($('#groupEventsContainer'));
};
eventTest();

const eventTest2 = () => {
  const workspace = new Workspace();
  workspace.setSize('150px', '150px');
  workspace.setCoordSize(200, 200);

  const groupOuter = new Group();
  groupOuter.setSize(50, 50);
  groupOuter.setPosition(25, 25);
  groupOuter.setCoordSize(100, 100);
  groupOuter.setCoordOrigin(0, 0);
  workspace.append(groupOuter);

  const elipseOuter = new Elipse();
  elipseOuter.setSize(200, 200);
  elipseOuter.setPosition(100, 100);
  elipseOuter.setFill('red');
  groupOuter.append(elipseOuter);

  let line = new Line();
  line.setFrom(0, 0);
  line.setTo(200, 200);
  line.setStroke('red');
  groupOuter.append(line);

  line = new Line();
  line.setFrom(200, 0);
  line.setTo(0, 200);
  line.setStroke('red');
  groupOuter.append(line);

  const groupInner = new Group();
  groupInner.setSize(50, 50);
  groupInner.setPosition(25, 25);
  groupInner.setCoordSize(100, 100);
  groupInner.setCoordOrigin(0, 0);
  groupOuter.append(groupInner);

  const elipse = new Elipse();
  elipse.setSize(200, 200);
  elipse.setPosition(100, 100);
  groupInner.append(elipse);

  line = new Line();
  line.setFrom(0, 0);
  line.setTo(200, 200);
  line.setStroke('blue');
  groupInner.append(line);

  line = new Line();
  line.setFrom(200, 0);
  line.setTo(0, 200);
  line.setStroke('blue');
  groupInner.append(line);

  workspace.addItAsChildTo($('#groupNestedContainer'));
};
eventTest2();

const workspaceCoordSizeSample = () => {
  function groupSampleBuilder(width, height) {
    // Group with CoordSize(50,50);
    const workspace = new Workspace();
    workspace.setSize('100px', '100px');
    workspace.setCoordSize(100, 100);

    const elipseOuter = new Elipse();
    elipseOuter.setPosition(50, 50);
    elipseOuter.setSize(50, 50);
    workspace.append(elipseOuter);

    const group = new Group();
    group.setSize(50, 50);
    group.setCoordSize(width, height);
    group.setPosition(25, 25);
    workspace.append(group);

    const elipseInner = new Elipse();
    elipseInner.setPosition(50, 50);
    elipseInner.setSize(50, 50);
    elipseInner.setFill('red');
    group.append(elipseInner);

    return workspace;
  }

  const sample100x100 = groupSampleBuilder(100, 100);
  sample100x100.addItAsChildTo($('#coordsizeExample100x100'));

  const sample100x200 = groupSampleBuilder(100, 200);
  sample100x200.addItAsChildTo($('#coordsizeExample100x200'));

  const sample200x100 = groupSampleBuilder(200, 100);
  sample200x100.addItAsChildTo($('#coordsizeExample200x100'));
};
workspaceCoordSizeSample();

const workspaceCoordOriginSample = () => {
  function groupSampleBuilder(x, y) {
    const workspace = new Workspace();
    workspace.setSize('100px', '100px');
    workspace.setCoordSize(100, 100);

    const elipseOuter = new Elipse();
    elipseOuter.setPosition(50, 50);
    elipseOuter.setSize(50, 50);
    workspace.append(elipseOuter);

    const group = new Group();
    group.setSize(50, 50);
    group.setCoordSize(100, 100);
    group.setCoordOrigin(x, y);
    group.setPosition(25, 25);
    workspace.append(group);

    const elipseInner = new Elipse();
    elipseInner.setPosition(50, 50);
    elipseInner.setSize(50, 50);
    elipseInner.setFill('red');
    group.append(elipseInner);

    return workspace;
  }

  const sample0x0 = groupSampleBuilder(0, 0);
  sample0x0.addItAsChildTo($('#coordOriginExample0x0'));

  const sample100x200 = groupSampleBuilder(0, 50);
  sample100x200.addItAsChildTo($('#coordOriginExample0x50'));

  const sample200x100 = groupSampleBuilder(50, 0);
  sample200x100.addItAsChildTo($('#coordOriginExample50x0'));
};
workspaceCoordOriginSample();

const groupVisibilitySample = () => {
  const workspace = new Workspace();
  workspace.setSize('100px', '100px');
  workspace.setCoordSize(100, 100);

  const group = new Group();
  group.setSize(100, 100);
  group.setPosition(0, 0);
  group.setCoordSize(100, 100);
  group.addEvent('mouseover', () => {
    alert('Mouse Over Group');
  });
  workspace.append(group);

  const elipseOuter = new Elipse();
  elipseOuter.setPosition(50, 50);
  elipseOuter.setSize(50, 50);
  group.addEvent('mouseover', () => {
    alert('Mouse Over elipseOuter');
  });
  group.append(elipseOuter);

  const elipseInner = new Elipse();
  elipseInner.setPosition(50, 50);
  elipseInner.setSize(25, 25);
  elipseInner.setFill('red');
  group.append(elipseInner);

  let isVisible = true;
  const executer = function () {
    isVisible = !isVisible;
    group.setVisibility(isVisible);
  };
  // executer.periodical(100);
  workspace.addItAsChildTo($('#visibilityExample'));
};
groupVisibilitySample();

const groupVisibilitySample2 = () => {
  const workspace = new Workspace();
  workspace.setSize('100px', '100px');
  workspace.setCoordSize(100, 100);

  const group = new Group();
  group.setSize(100, 100);
  group.setPosition(0, 0);
  group.setCoordSize(100, 100);
  workspace.append(group);

  const elipseOuter = new Elipse();
  elipseOuter.setPosition(50, 50);
  elipseOuter.setSize(50, 50);
  group.append(elipseOuter);

  const elipseInner = new Elipse();
  elipseInner.setPosition(50, 50);
  elipseInner.setSize(25, 25);
  elipseInner.setFill('red');
  group.append(elipseInner);

  let width = 10;
  let height = 10;
  const executer = function () {
    width = (width + 10) % 100;
    height = (height + 10) % 100;
    group.setCoordSize(width, height);
  };
  // executer.periodical(100);
  workspace.addItAsChildTo($('#scaleStrokeExample'));
};
groupVisibilitySample2();