package de.ivu.elect.business.replikation.control;

import java.io.File;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.annotation.Nullable;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *  on 24.11.2015.
 */
@Deprecated // nicht für neue Sachen verwenden
public class ReplikationExtractSequenznummer {
  private static final Logger LOG = LoggerFactory.getLogger(ReplikationExtractSequenznummer.class);

  // ELECTBB-217
  private static final Map<String, Long> SEQUENCENUMBER_CACHE = new ConcurrentHashMap<>();

  @Nullable
  public static Long extractSequenznummer(File file) {
    if (file==null){
      return null;
    }
    return extractSequenznummer(file.getName());
  }

  @Nullable
  public static Long extractSequenznummer(String name) {
    // null nicht als Key in ConcurrentHashMap erlaubt...
    if (name==null){
      return null;
    }
    return SEQUENCENUMBER_CACHE.computeIfAbsent(name, ReplikationExtractSequenznummer::extractSequenznummerFromString);
  }

  @Nullable
  static Long extractSequenznummerFromString(String name) {
    try {
      if (!name.endsWith(".zip") && !name.endsWith(".ZIP")) {
        // ELECTBB-217 toLowerCase vermeiden (hinfällig, wenn Cache verwendet wird)
        if (!name.toLowerCase().endsWith(".zip")) {
          return null;
        }
      }

      String id = name.substring(0, name.indexOf("."));
      return Long.parseLong(id);
    } catch (Exception e) {
      LOG.error("Kann id nicht parsen: " + name, e.getMessage());
      return null;
    }
  }

}
