import { observer } from "mobx-react";
import { observable, trace, runInAction, computed } from "mobx";
import { InkingControl } from "./InkingControl";
import React = require("react");
import { InkTool, InkField, InkData } from "../../new_fields/InkField";
import "./InkingStroke.scss";
import { AudioBox } from "./nodes/AudioBox";
import { Doc, FieldResult } from "../../new_fields/Doc";
import { createSchema, makeInterface, listSpec } from "../../new_fields/Schema";
import { documentSchema } from "../../new_fields/documentSchemas";
import { DocExtendableComponent } from "./DocComponent";
import { FieldViewProps, FieldView } from "./nodes/FieldView";
import { Transform } from "../util/Transform";
import { Cast, FieldValue } from "../../new_fields/Types";
import { List } from "../../new_fields/List";
type InkDocument = makeInterface<[typeof documentSchema]>;
const InkDocument = makeInterface(documentSchema);
export function CreatePolyline(points: { x: number, y: number }[], left: number, top: number, color?: string, width?: number) {
    let pts = points.reduce((acc: string, pt: { x: number, y: number }) => acc + `${pt.x - left},${pt.y - top} `, "");
    return (
        
    );
}
@observer
export class InkingStroke extends DocExtendableComponent(InkDocument) {
    public static LayoutString(fieldStr: string) { return FieldView.LayoutString(InkingStroke, fieldStr); }
    @computed get PanelWidth() { return this.props.PanelWidth(); }
    @computed get PanelHeight() { return this.props.PanelHeight(); }
    render() {
        // let pathData = this.parseData(this.props.line);
        let data: InkData = Cast(this.Document.data, InkField) ?.inkData ?? [];
        let xs = data.map(p => p.x);
        let ys = data.map(p => p.y);
        let left = Math.min(...xs);
        let top = Math.min(...ys);
        let right = Math.max(...xs);
        let bottom = Math.max(...ys);
        let points = CreatePolyline(data, 0, 0, this.Document.color, this.Document.strokeWidth);
        let width = right - left;
        let height = bottom - top;
        let scaleX = this.PanelWidth / width;
        let scaleY = this.PanelHeight / height;
        // let pathlength = this.props.count; // bcz: this is needed to force reactions to the line's data changes
        return (
            
        );
    }
}