package com.ibeetl.admin.core.gen;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import com.ibeetl.admin.core.gen.model.Entity;

public class MavenProjectTarget extends BaseTarget {
  Entity entity;
  String basePackage;
  String basePackagePath = null;
  String targetPath = null;

  public MavenProjectTarget(Entity entity, String basePackage) {
    this.entity = entity;
    this.basePackage = basePackage;
    this.basePackagePath = basePackage.replace('.', '/');
  }

  @Override
  public void flush(AutoGen gen, String content) {
    String name = gen.getName();
    String target = null;
    if (gen instanceof JSDelGen) {
      target =
          getResourcePath() + "/static/js/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof JSEditGen) {
      target =
          getResourcePath() + "/static/js/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof JSAddGen) {
      target =
          getResourcePath() + "/static/js/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof JSApiGen) {
      target =
          getResourcePath() + "/static/js/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof JSIndexGen) {
      target =
          getResourcePath() + "/static/js/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof HtmlIndexGen) {
      target =
          getResourcePath() + "/templates/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof HtmlEditGen) {
      target =
          getResourcePath() + "/templates/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof HtmlAddGen) {
      target =
          getResourcePath() + "/templates/" + this.urlBase + "/" + entity.getCode() + "/" + name;
    } else if (gen instanceof MdGen) {
      target = getResourcePath() + "/sql/" + entity.getSystem() + "/" + name;
    } else if (gen instanceof JavaEntityGen) {
      target = getSrcPath() + "/" + basePackagePath + "/entity/" + name;
    } else if (gen instanceof JavaDaoGen) {
      target = getSrcPath() + "/" + basePackagePath + "/dao/" + name;
    } else if (gen instanceof JavaQueryGen) {
      target = getSrcPath() + "/" + basePackagePath + "/web/query/" + name;
    } else if (gen instanceof JavaServiceGen) {
      target = getSrcPath() + "/" + basePackagePath + "/service/" + name;
    } else if (gen instanceof JavaControllerGen) {
      target = getSrcPath() + "/" + basePackagePath + "/web/" + name;
    }

    if (target == null) {
      return;
    }
    flush(target, content);
  }

  protected void flush(String path, String content) {

    FileWriter fw;
    try {
      File file = new File(path);
      if (!file.getParentFile().exists()) {
        file.getParentFile().mkdirs();
      }
      fw = new FileWriter(new File(path));
      fw.write(content);
      fw.close();
      System.out.println(path);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public String getTargetPath() {
    return targetPath;
  }

  public void setTargetPath(String targetPath) {
    this.targetPath = targetPath;
  }

  private String getSrcPath() {

    return getRootPath() + File.separator + "src/main/java";
  }

  private String getResourcePath() {

    return getRootPath() + File.separator + "src/main/resources";
  }

  public String getRootPath() {
    if (targetPath != null) {
      return targetPath;
    } else {
      return detectRootPath();
    }
  }

  public static String detectRootPath() {
    String srcPath;
    String userDir = System.getProperty("user.dir");
    if (userDir == null) {
      throw new NullPointerException("用户目录未找到");
    }

    return userDir;
  }
}
