/*
 ************************************************************************************
 * Copyright (C) 2016 Openbravo S.L.U.
 * Licensed under the Openbravo Commercial License version 1.0
 * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
 * or in the legal folder of this module distribution.
 ************************************************************************************
 */

package org.openbravo.retail.orderpreparation;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.openbravo.client.kernel.RequestContext;
import org.openbravo.retail.posterminal.POSAppCacheResourceProvider;

public class OrderPreparationAppCacheProvider implements POSAppCacheResourceProvider {

  private static final String PATH_PREFIX = "web" + File.separatorChar;

  @Override
  public List<String> getResources() {
    final ArrayList<String> list = new ArrayList<String>();
    list.addAll(getcssFileList());
    list.addAll(getImageFileList());
    return list;
  }

  private List<String> getImageFileList() {
    final String[] extensions = { "png", "gif" };
    return transformPath(getFileList(extensions));
  }

  private List<String> getcssFileList() {
    final String[] extensions = { "css", "less" };
    return transformPath(getFileList(extensions));
  }

  private List<String> getFileList(String[] extensions) {

    final String relativePath = "/" + PATH_PREFIX + getModulePackageName();

    List<String> fileList = new ArrayList<String>();

    final File directory = new File(RequestContext.getServletContext().getRealPath(relativePath));

    final Iterator<File> it = FileUtils.iterateFiles(directory, extensions, true);

    while (it.hasNext()) {
      final File f = it.next();
      fileList.add(f.getPath());
    }
    return fileList;
  }

  private List<String> transformPath(List<String> stringFileList) {
    final List<String> resources = new ArrayList<String>();
    final String relativePath = PATH_PREFIX + getModulePackageName();

    for (final String f : stringFileList) {
      final int pos = f.indexOf(relativePath);
      resources.add("../../" + f.substring(pos));
    }
    return resources;
  }

  private String getModulePackageName() {
    return this.getClass().getPackage().getName();
  }

}
