/**
 * @author tschw
 */

function TeapotBufferGeometryPanel(signals, object) {

    var container = new UI.Row();

    var parameters = object.geometry.parameters;

    // size

    var sizeRow = new UI.Row();
    var size = new UI.Number(parameters.size).onChange(update);

    sizeRow.add(new UI.Text('尺寸').setWidth('90px'));
    sizeRow.add(size);

    container.add(sizeRow);

    // segments

    var segmentsRow = new UI.Row();
    var segments = new UI.Integer(parameters.segments).setRange(1, Infinity).onChange(update);

    segmentsRow.add(new UI.Text('段数').setWidth('90px'));
    segmentsRow.add(segments);

    container.add(segmentsRow);

    // bottom

    var bottomRow = new UI.Row();
    var bottom = new UI.Checkbox(parameters.bottom).onChange(update);

    bottomRow.add(new UI.Text('底部').setWidth('90px'));
    bottomRow.add(bottom);

    container.add(bottomRow);

    // lid

    var lidRow = new UI.Row();
    var lid = new UI.Checkbox(parameters.lid).onChange(update);

    lidRow.add(new UI.Text('壶盖').setWidth('90px'));
    lidRow.add(lid);

    container.add(lidRow);

    // body

    var bodyRow = new UI.Row();
    var body = new UI.Checkbox(parameters.body).onChange(update);

    bodyRow.add(new UI.Text('壶体').setWidth('90px'));
    bodyRow.add(body);

    container.add(bodyRow);

    // fitted lid

    var fitLidRow = new UI.Row();
    var fitLid = new UI.Checkbox(parameters.fitLid).onChange(update);

    fitLidRow.add(new UI.Text('适合壶盖').setWidth('90px'));
    fitLidRow.add(fitLid);

    container.add(fitLidRow);

    // blinn-sized

    var blinnRow = new UI.Row();
    var blinn = new UI.Checkbox(parameters.blinn).onChange(update);

    blinnRow.add(new UI.Text('Blinn缩放').setWidth('90px'));
    blinnRow.add(blinn);

    container.add(blinnRow);

    function update() {

        object.geometry.dispose();

        object.geometry = new THREE.TeapotBufferGeometry(
            size.getValue(),
            segments.getValue(),
            bottom.getValue(),
            lid.getValue(),
            body.getValue(),
            fitLid.getValue(),
            blinn.getValue()
        );

        object.geometry.computeBoundingSphere();

        signals.geometryChanged.dispatch(object);

    }

    return container;

};

export default TeapotBufferGeometryPanel;