/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.ide.common.vectordrawable;

/**
 * Build a string for Svg file's path data.
 */
class PathBuilder {
  private StringBuilder mPathData = new StringBuilder();

  private String booleanToString(boolean flag) {
    return flag ? "1" : "0";
  }

  public PathBuilder absoluteMoveTo(float x, float y) {
    mPathData.append("M"+ x + "," + y);
    return this;
  }

  public PathBuilder relativeMoveTo(float x, float y) {
    mPathData.append("m"+ x + "," + y);
    return this;
  }

  public PathBuilder absoluteLineTo(float x, float y) {
    mPathData.append("L"+ x + "," + y);
    return this;
  }

  public PathBuilder relativeLineTo(float x, float y) {
    mPathData.append("l"+ x + "," + y);
    return this;
  }

  public PathBuilder absoluteVerticalTo(float v) {
    mPathData.append("V"+ v);
    return this;
  }

  public PathBuilder relativeVerticalTo(float v) {
    mPathData.append("v"+ v);
    return this;
  }

  public PathBuilder absoluteHorizontalTo(float h) {
    mPathData.append("H"+ h);
    return this;
  }

  public PathBuilder relativeHorizontalTo(float h) {
    mPathData.append("h"+ h);
    return this;
  }

  public PathBuilder absoluteArcTo(float rx, float ry, boolean rotation,
                                   boolean largeArc, boolean sweep, float x, float y) {
    mPathData.append("A"+ rx + "," + ry + "," + booleanToString(rotation) + "," +
                     booleanToString(largeArc) + "," + booleanToString(sweep) + "," + x + "," + y );
    return this;
  }

  public PathBuilder relativeArcTo(float rx, float ry, boolean rotation,
                                   boolean largeArc, boolean sweep, float x, float y) {
    mPathData.append("a"+ rx + "," + ry + "," + booleanToString(rotation) + "," +
                     booleanToString(largeArc) + "," + booleanToString(sweep) + "," + x + "," + y );
    return this;
  }

  public PathBuilder absoluteClose() {
    mPathData.append("Z");
    return this;
  }

  public PathBuilder relativeClose() {
    mPathData.append("z");
    return this;
  }

  public String toString() {
    return mPathData.toString();
  }
}