import type { HiringCafeCountryLocation } from "./country-map.js";

export interface HiringCafeSearchState {
  locations: HiringCafeCountryLocation[];
  workplaceTypes: Array<"Remote" | "Hybrid" | "Onsite">;
  defaultToUserLocation: boolean;
  userLocation: null;
  commitmentTypes: string[];
  seniorityLevel: string[];
  roleTypes: string[];
  roleYoeRange: [number, number];
  excludeIfRoleYoeIsNotSpecified: boolean;
  managementYoeRange: [number, number];
  excludeIfManagementYoeIsNotSpecified: boolean;
  securityClearances: string[];
  searchQuery: string;
  dateFetchedPastNDays: number;
  hiddenCompanies: string[];
  sortBy: "default";
  companyPublicOrPrivate: "all";
  latestInvestmentYearRange: [null, null];
  latestInvestmentSeries: string[];
  latestInvestmentAmount: null;
  latestInvestmentCurrency: string[];
  investors: string[];
  excludedInvestors: string[];
  isNonProfit: "all";
  companySizeRanges: string[];
  minYearFounded: null;
  maxYearFounded: null;
  excludedLatestInvestmentSeries: string[];
}

export function createDefaultSearchState(args: {
  searchQuery: string;
  location: HiringCafeCountryLocation | null;
  dateFetchedPastNDays: number;
  workplaceTypes?: Array<"Remote" | "Hybrid" | "Onsite">;
}): HiringCafeSearchState {
  return {
    locations: args.location ? [args.location] : [],
    workplaceTypes: args.workplaceTypes ?? ["Remote", "Hybrid", "Onsite"],
    defaultToUserLocation: false,
    userLocation: null,
    commitmentTypes: [
      "Full Time",
      "Part Time",
      "Contract",
      "Internship",
      "Temporary",
      "Seasonal",
      "Volunteer",
    ],
    seniorityLevel: [
      "No Prior Experience Required",
      "Entry Level",
      "Mid Level",
      "Senior Level",
    ],
    roleTypes: ["Individual Contributor", "People Manager"],
    roleYoeRange: [0, 20],
    excludeIfRoleYoeIsNotSpecified: false,
    managementYoeRange: [0, 20],
    excludeIfManagementYoeIsNotSpecified: false,
    securityClearances: [
      "None",
      "Confidential",
      "Secret",
      "Top Secret",
      "Top Secret/SCI",
      "Public Trust",
      "Interim Clearances",
      "Other",
    ],
    searchQuery: args.searchQuery,
    dateFetchedPastNDays: args.dateFetchedPastNDays,
    hiddenCompanies: [],
    sortBy: "default",
    companyPublicOrPrivate: "all",
    latestInvestmentYearRange: [null, null],
    latestInvestmentSeries: [],
    latestInvestmentAmount: null,
    latestInvestmentCurrency: [],
    investors: [],
    excludedInvestors: [],
    isNonProfit: "all",
    companySizeRanges: [],
    minYearFounded: null,
    maxYearFounded: null,
    excludedLatestInvestmentSeries: [],
  };
}
