export const DUPLICATE_KEY_VALUE = "23505";
export const FOREIGN_KEY_VIOLATION = "23503";

export const DEFAULT_ERROR_MESSAGE = "Unknown error has occurred.";

export const SessionsStatus = {
  IDLE: "IDLE",
  STARTED: "STARTED",
  ENDED: "ENDED"
};

export const LOG_DESCRIPTIONS = {
  PROJECT_CREATED: "Project created by @user",
  PROJECT_UPDATED: "Project updated by @user",
  TASK_CREATED: "Task created by @user",
  TASK_UPDATED: "Task updated by @user",
  PROJECT_MEMBER_ADDED: "was added to the project by",
  PROJECT_MEMBER_REMOVED: "was removed from the project by",
};

export const WorklenzColorCodes = [
  "#154c9b",
  "#3b7ad4",
  "#70a6f3",
  "#7781ca",
  "#9877ca",
  "#c178c9",
  "#ee87c5",
  "#ca7881",
  "#75c9c0",
  "#75c997",
  "#80ca79",
  "#aacb78",
  "#cbbc78",
  "#cb9878",
  "#bb774c",
  "#905b39",
  "#903737",
  "#bf4949",
  "#f37070",
  "#ff9c3c",
  "#fbc84c",
  "#cbc8a1",
  "#a9a9a9",
  "#767676"
];

export const AvatarNamesMap: { [x: string]: string } = {
  "A": "#154c9b",
  "B": "#3b7ad4",
  "C": "#70a6f3",
  "D": "#7781ca",
  "E": "#9877ca",
  "F": "#c178c9",
  "G": "#ee87c5",
  "H": "#ca7881",
  "I": "#75c9c0",
  "J": "#75c997",
  "K": "#80ca79",
  "L": "#aacb78",
  "M": "#cbbc78",
  "N": "#cb9878",
  "O": "#bb774c",
  "P": "#905b39",
  "Q": "#903737",
  "R": "#bf4949",
  "S": "#f37070",
  "T": "#ff9c3c",
  "U": "#fbc84c",
  "V": "#cbc8a1",
  "W": "#a9a9a9",
  "X": "#767676",
  "Y": "#cb9878",
  "Z": "#903737",
  "+": "#9e9e9e"
};

export const NumbersColorMap: { [x: string]: string } = {
  "0": "#154c9b",
  "1": "#3b7ad4",
  "2": "#70a6f3",
  "3": "#7781ca",
  "4": "#9877ca",
  "5": "#c178c9",
  "6": "#ee87c5",
  "7": "#ca7881",
  "8": "#75c9c0",
  "9": "#75c997"
};

export const PriorityColorCodes: { [x: number]: string; } = {
  0: "#75c997",
  1: "#fbc84c",
  2: "#f37070"
};

export const PriorityColorCodesDark: { [x: number]: string; } = {
  0: "#46D980",
  1: "#FFC227",
  2: "#FF4141"
};

export const TASK_STATUS_TODO_COLOR = "#a9a9a9";
export const TASK_STATUS_DOING_COLOR = "#70a6f3";
export const TASK_STATUS_DONE_COLOR = "#75c997";

export const TASK_PRIORITY_LOW_COLOR = "#75c997";
export const TASK_PRIORITY_MEDIUM_COLOR = "#fbc84c";
export const TASK_PRIORITY_HIGH_COLOR = "#f37070";

export const TASK_DUE_COMPLETED_COLOR = "#75c997";
export const TASK_DUE_UPCOMING_COLOR = "#70a6f3";
export const TASK_DUE_OVERDUE_COLOR = "#f37070";
export const TASK_DUE_NO_DUE_COLOR = "#a9a9a9";


export const DEFAULT_PAGE_SIZE = 20;

// S3 Credentials
export const REGION = process.env.S3_REGION || "us-east-1";
export const BUCKET = process.env.S3_BUCKET || "your-bucket-name";
export const S3_URL = process.env.S3_URL || "https://your-s3-url";
export const S3_ACCESS_KEY_ID = process.env.S3_ACCESS_KEY_ID || "";
export const S3_SECRET_ACCESS_KEY = process.env.S3_SECRET_ACCESS_KEY || "";

// Azure Blob Storage Credentials
export const STORAGE_PROVIDER = process.env.STORAGE_PROVIDER || "s3";
export const AZURE_STORAGE_ACCOUNT_NAME = process.env.AZURE_STORAGE_ACCOUNT_NAME;
export const AZURE_STORAGE_CONTAINER = process.env.AZURE_STORAGE_CONTAINER;
export const AZURE_STORAGE_ACCOUNT_KEY = process.env.AZURE_STORAGE_ACCOUNT_KEY;
export const AZURE_STORAGE_URL = process.env.AZURE_STORAGE_URL;

export function getStorageUrl() {
  if (STORAGE_PROVIDER === "azure") {
    if (!AZURE_STORAGE_URL) {
      console.warn("AZURE_STORAGE_URL is not defined, falling back to S3_URL");
      return S3_URL;
    }
    
    // Return just the base Azure Blob Storage URL
    // AZURE_STORAGE_URL should be in the format: https://storageaccountname.blob.core.windows.net
    return `${AZURE_STORAGE_URL}/${AZURE_STORAGE_CONTAINER}`;
  }
  return S3_URL;
}

export const TASK_STATUS_COLOR_ALPHA = "69";
export const TASK_PRIORITY_COLOR_ALPHA = "69";
export const TEAM_MEMBER_TREE_MAP_COLOR_ALPHA = "40";

// LICENSING SERVER URLS
export const LOCAL_URL = "http://localhost:3001";
export const UAT_SERVER_URL = process.env.UAT_SERVER_URL || "https://your-uat-server-url";
export const DEV_SERVER_URL = process.env.DEV_SERVER_URL || "https://your-dev-server-url";
export const PRODUCTION_SERVER_URL = process.env.PRODUCTION_SERVER_URL || "https://your-production-server-url";

// *Sync with the client
export const PASSWORD_POLICY = "Minimum of 8 characters, with upper and lowercase and a number and a symbol.";

// paddle status to exclude
export const statusExclude = ["past_due", "paused", "deleted"];

export const HTML_TAG_REGEXP = /<\/?[^>]+>/gi;

export const UNMAPPED = "Unmapped";

export const DATE_RANGES = {
  YESTERDAY: "YESTERDAY",
  LAST_WEEK: "LAST_WEEK",
  LAST_MONTH: "LAST_MONTH",
  LAST_QUARTER: "LAST_QUARTER",
  ALL_TIME: "ALL_TIME"
};
