/* eslint-disable @typescript-eslint/no-explicit-any */

import { Category } from "./category";
import { MapSource } from "./map-source";

export interface Classification {
  id: string;
  name: string;
  is_open: boolean;
  is_limited: boolean;
  is_secret: boolean;
}

export interface ProjectionSystem {
  id: string;
  name: string;
}

export interface Producer {
  id: string;
  name: string;
  description: string;
  thumbnail: string;
  address: string;
  phone_number: string;
  email: string;
  website: string;
}

export interface Regional {
  id: string;
  code: string;
  name: string;
  description: any;
  thumbnail: any;
  is_active: boolean;
}

export interface Credential {
  id: string;
  name: string;
  description: string;
  credential_type: string;
  credential_metadata: CredentialMetadata;
  is_default: boolean;
  is_active: boolean;
  created_by: string;
  updated_by: string;
  created_at: string;
  updated_at: string;
  last_used_at: any;
  last_used_by: any;
}

export interface CredentialMetadata {
  environment: string;
  version: string;
}

export type Mapset = {
  id: string;
  name: string;
  description: string;
  scale: string;
  layer_url: string;
  layer_type: "line" | "polygon" | "point" | null;
  metadata_url: string;
  status_validation: string;
  classification: Classification;
  data_status: "sementara" | "tetap";
  data_update_period: string;
  data_version: string;
  download_count: number;
  coverage_level: string;
  coverage_area: string;
  category: Category;
  projection_system: ProjectionSystem;
  producer: Producer;
  regional: Regional;
  sources: MapSource[];
  is_popular: boolean;
  is_active: boolean;
  created_at: string;
  updated_at: string;
  view_count: number;
};

export interface MapsetSubmitPayload {
  name: string;
  description: string;
  scale: string;
  data_status: string;
  data_update_period: string;
  data_version: string;
  category_id: string;
  projection_system_id: string;
  producer_id: string;
  source_id?: string | string[] | null;
  is_popular: boolean;
  is_active: boolean;
  layer_url: string;
  layer_type: "line" | "polygon" | "point" | null;
  metadata_url: string;
  regional_id: string;
  classification_id: string;
  status_validation: string;
  notes?: string;
  coverage_level: string;
  coverage_area: string;
}
