import {
  STATUS_DANGEROUS,
  STATUS_NORMAL,
  STATUS_SOS,
  STATUS_WARNING,
} from '@/constants';
import { createWmsLayer } from '@/utils/slave/sgw/mapUtils';
import TileLayer from 'ol/layer/Tile';
import { XYZ } from 'ol/source';

export const GEOSERVER_URL = '/geoserver'; // Sử dụng proxy của CRA
export const WORKSPACE = 'vn_gadm_shp';

export const PROJECTION = 'EPSG:3857';
export const LAYERS = {
  TINH: {
    name: 'DiaPhan_Tinh_2025',
    wmsVisibleUpTo: 9.99,
    vectorVisibleUpTo: 9.99,
    nameProperty: 'tenTinh',
    // Các thuộc tính sẽ hiển thị trong popup
    // Key: Nhãn hiển thị, Value: Tên thuộc tính trong dữ liệu
    popupProperties: { 'Dân số': 'danSo', 'Diện tích (km²)': 'dienTich' },
  },
  XA: {
    name: 'DiaPhan_Xa_2025',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'tenXa',
    // Các thuộc tính sẽ hiển thị trong popup
    // Key: Nhãn hiển thị, Value: Tên thuộc tính trong dữ liệu
    popupProperties: { 'Dân số': 'danSo', 'Diện tích (km²)': 'dienTich' },
  },
  FISHING_BANZONE: {
    name: 'fishing_ban_zones',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'name',
    popupProperties: {},
  },
  ENTRY_BANZONE: {
    name: 'entry_ban_zones',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'name',
    popupProperties: {},
  },
  BOUNDARY_LINES: {
    name: 'boundary_lines',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'name',
    popupProperties: {},
  },
  EXIT_BANZONE: {
    name: 'exit_ban_zones',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'name',
    popupProperties: {},
  },
  PORTS: {
    name: 'ports',
    wmsVisibleFrom: 10,
    vectorVisibleFrom: 10,
    nameProperty: 'name',
    popupProperties: {},
  },
};

export const BASEMAP_URL =
  'https://cartodb-basemaps-a.global.ssl.fastly.net/light_nolabels/{z}/{x}/{y}.png';
export const BASEMAP_ATTRIBUTIONS = '© OpenStreetMap contributors, © CartoDB';

export const INITIAL_VIEW_CONFIG = {
  // Dịch tâm bản đồ ra phía biển và zoom ra xa hơn để thấy bao quát
  center: [116.152685, 15.70581],
  zoom: 6.5,
  minZoom: 5,
  maxZoom: 12,
  minScale: 0.1,
  maxScale: 0.4,
};

export const osmLayer = new TileLayer({
  source: new XYZ({
    url: BASEMAP_URL,
    attributions: BASEMAP_ATTRIBUTIONS,
  }),
});

export const wmsTinhLayer = createWmsLayer(LAYERS.TINH.name);

export const wmsXaLayer = createWmsLayer(LAYERS.XA.name);

export const wmsEntryBanzoneLayer = createWmsLayer(LAYERS.ENTRY_BANZONE.name);
export const wmsBoundaryLineLayer = createWmsLayer(LAYERS.BOUNDARY_LINES.name);
export const wmsFishingBanzoneLayer = createWmsLayer(
  LAYERS.FISHING_BANZONE.name,
);
export const wmsExitBanzoneLayer = createWmsLayer(LAYERS.EXIT_BANZONE.name);
export const wmsPortsLayer = createWmsLayer(LAYERS.PORTS.name);

export const getShipNameColor = (status: number) => {
  switch (status) {
    case STATUS_NORMAL:
      return 'green';
    case STATUS_WARNING:
      return 'orange';
    case STATUS_DANGEROUS:
      return 'red';
    case STATUS_SOS:
      return 'red';
    default:
      return 'black';
  }
};
