/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

const defaultTz = "America/Los_Angeles";

const getDefaultTimezone = () => {
  let timezone = defaultTz;
  try {
    timezone = moment.tz.guess();
  } catch (e) {
    console.log(e);
  }
  return timezone || defaultTz;
};

export const convertTimestampWithTz = (timestamp, format = "YYYY/MM/DD") => {
  return moment.tz(parseInt(timestamp), getDefaultTimezone()).format(format);
};
