import BathroomCabinetIcon from "@scandic-hotels/design-system/Icons/BathroomCabinetIcon"
import BouquetIcon from "@scandic-hotels/design-system/Icons/BouquetIcon"
import BowlingPinsIcon from "@scandic-hotels/design-system/Icons/BowlingPinsIcon"
import ChipsIcon from "@scandic-hotels/design-system/Icons/ChipsIcon"
import ConferenceRoomIcon from "@scandic-hotels/design-system/Icons/ConferenceRoomIcon"
import DoorIcon from "@scandic-hotels/design-system/Icons/DoorIcon"
import FacebookIcon from "@scandic-hotels/design-system/Icons/FacebookIcon"
import FootStoolIcon from "@scandic-hotels/design-system/Icons/FootStoolIcon"
import HairdresserIcon from "@scandic-hotels/design-system/Icons/HairdresserIcon"
import HairdryerIcon from "@scandic-hotels/design-system/Icons/HairdryerIcon"
import IceMachineIcon from "@scandic-hotels/design-system/Icons/IceMachineIcon"
import InstagramIcon from "@scandic-hotels/design-system/Icons/InstagramIcon"
import MassageIcon from "@scandic-hotels/design-system/Icons/MassageIcon"
import {
  MaterialIcon,
  type MaterialIconSetIconProps,
} from "@scandic-hotels/design-system/Icons/MaterialIcon"
import PalmTreeIcon from "@scandic-hotels/design-system/Icons/PalmTreeIcon"
import PopcornIcon from "@scandic-hotels/design-system/Icons/PopcornIcon"
import RecordPlayerIcon from "@scandic-hotels/design-system/Icons/RecordPlayerIcon"
import RoadIcon from "@scandic-hotels/design-system/Icons/RoadIcon"
import SafetyBoxIcon from "@scandic-hotels/design-system/Icons/SafetyBoxIcon"
import ToiletIcon from "@scandic-hotels/design-system/Icons/ToiletIcon"
import TripadvisorIcon from "@scandic-hotels/design-system/Icons/TripadvisorIcon"
import UserPoliceIcon from "@scandic-hotels/design-system/Icons/UserPoliceIcon"

import { IconName } from "./iconName"

import type {
  IconProps,
  NucleoIconProps,
} from "@scandic-hotels/design-system/Icons"

import type { JSX } from "react";

interface IconByIconNameProps {
  iconName: IconName | null
}
export function IconByIconName({
  iconName,
  ...props
}: IconByIconNameProps &
  (
    | IconProps
    | NucleoIconProps
    | MaterialIconSetIconProps
  )): JSX.Element | null {
  switch (iconName) {
    case IconName.Accessibility:
      return <MaterialIcon icon="accessibility" {...props} />
    case IconName.Air:
      return <MaterialIcon icon="air" {...props} />
    case IconName.ArrowFrom:
      return <MaterialIcon icon="upload" {...props} />
    case IconName.ArrowTo:
      return <MaterialIcon icon="download" {...props} />
    case IconName.Swipe:
      return <MaterialIcon icon="swipe" {...props} />
    case IconName.ConferenceRoom:
      return <ConferenceRoomIcon {...props} />
    case IconName.BathroomCabinet:
      return <BathroomCabinetIcon {...props} />
    case IconName.Chips:
      return <ChipsIcon {...props} />
    case IconName.Bouquet:
      return <BouquetIcon {...props} />
    case IconName.CashFree:
      return <MaterialIcon icon="credit_card_heart" {...props} />
    case IconName.SafetyBox:
      return <SafetyBoxIcon {...props} />
    case IconName.Toilet:
      return <ToiletIcon {...props} />
    case IconName.Popcorn:
      return <PopcornIcon {...props} />
    case IconName.RecordPlayer:
      return <RecordPlayerIcon {...props} />
    case IconName.PalmTree:
      return <PalmTreeIcon {...props} />
    case IconName.Bowling:
      return <BowlingPinsIcon {...props} />
    case IconName.Skiing:
      return <MaterialIcon icon="downhill_skiing" {...props} />
    case IconName.AirConAirCooling:
      return <MaterialIcon icon="mode_fan" {...props} />
    case IconName.Beach:
      return <MaterialIcon icon="beach_access" {...props} />
    case IconName.Hiking:
      return <MaterialIcon icon="hiking" {...props} />
    case IconName.LaptopSafe:
      return <MaterialIcon icon="sync_saved_locally" {...props} />
    case IconName.BeautySalon:
      return <MaterialIcon icon="health_and_beauty" {...props} />
    case IconName.Gaming:
      return <MaterialIcon icon="sports_esports" {...props} />
    case IconName.AirConditioningInRoom:
      return <MaterialIcon icon="air_purifier_gen" {...props} />
    case IconName.Airplane:
      return <MaterialIcon icon="travel" {...props} />
    case IconName.ArmChair:
      return <MaterialIcon icon="chair" {...props} />
    case IconName.ArrowRight:
      return <MaterialIcon icon="arrow_forward" {...props} />
    case IconName.ArrowRightSmall:
      return <MaterialIcon icon="arrow_forward" {...props} />
    case IconName.ArrowLeft:
      return <MaterialIcon icon="arrow_back" {...props} />
    case IconName.ArrowLeftSmall:
      return <MaterialIcon icon="arrow_back" {...props} />
    case IconName.Bar:
      return <MaterialIcon icon="local_bar" {...props} />
    case IconName.Bed:
      return <MaterialIcon icon="bed" {...props} />
    case IconName.LuggageLockers:
      return <DoorIcon {...props} />
    case IconName.NonSmoking:
      return <MaterialIcon icon="smoke_free" {...props} />
    case IconName.TVRemote:
      return <MaterialIcon icon="tv_remote" {...props} />
    case IconName.Minibar:
      return <MaterialIcon icon="liquor" {...props} />
    case IconName.Business:
    case IconName.BusinessCentre:
      return <MaterialIcon icon="business_center" {...props} />
    case IconName.IceMachine:
      return <IceMachineIcon {...props} />
    case IconName.Massage:
      return <MassageIcon {...props} />
    case IconName.Luggage:
      return <MaterialIcon icon="luggage" {...props} />
    case IconName.Ironing:
      return <MaterialIcon icon="iron" {...props} />
    case IconName.Kitchen:
      return <MaterialIcon icon="countertops" {...props} />
    case IconName.Guard:
      return <UserPoliceIcon {...props} />
    case IconName.Fax:
      return <MaterialIcon icon="fax" {...props} />
    case IconName.Calendar:
      return <MaterialIcon icon="calendar_today" {...props} />
    case IconName.Camera:
      return <MaterialIcon icon="camera" {...props} />
    case IconName.Cellphone:
    case IconName.Phone:
      return <MaterialIcon icon="phone" {...props} />
    case IconName.HairdryerInRoomAllScandic:
      return <HairdryerIcon {...props} />
    case IconName.ComplimentaryColdRefreshments:
      return <MaterialIcon icon="water_full" {...props} />
    case IconName.Check:
      return <MaterialIcon icon="check_box" {...props} />
    case IconName.CrossCircle:
      return <MaterialIcon icon="cancel" {...props} />
    case IconName.Wheelchair:
      return <MaterialIcon icon="accessible" {...props} />
    case IconName.Hairdresser:
      return <HairdresserIcon {...props} />
    case IconName.FoodDrinks247:
      return <MaterialIcon icon="fastfood" {...props} />
    case IconName.ExtraFamilyFriendly:
      return <MaterialIcon icon="family_restroom" {...props} />
    case IconName.Desk:
      return <MaterialIcon icon="desk" {...props} />
    case IconName.ConventionCentre:
      return <MaterialIcon icon="groups" {...props} />
    case IconName.City:
      return <MaterialIcon icon="location_city" {...props} />
    case IconName.CrossCircleOutline:
      return <MaterialIcon icon="cancel" {...props} />
    case IconName.CheckCircle:
      return <MaterialIcon icon="check_circle" {...props} />
    case IconName.ChevronDown:
      return <MaterialIcon icon="keyboard_arrow_down" {...props} />
    case IconName.ChevronDownSmall:
      return <MaterialIcon icon="keyboard_arrow_down" {...props} />
    case IconName.ChevronLeft:
      return <MaterialIcon icon="chevron_left" {...props} />
    case IconName.ChevronLeftSmall:
      return <MaterialIcon icon="chevron_left" {...props} />
    case IconName.ChevronRight:
      return <MaterialIcon icon="chevron_right" {...props} />
    case IconName.ChevronRightSmall:
      return <MaterialIcon icon="chevron_right" {...props} />
    case IconName.ChevronUp:
      return <MaterialIcon icon="keyboard_arrow_up" {...props} />
    case IconName.ChevronUpSmall:
      return <MaterialIcon icon="keyboard_arrow_up" {...props} />
    case IconName.Close:
      return <MaterialIcon icon="close" {...props} />
    case IconName.CloseLarge:
      return <MaterialIcon icon="close" {...props} />
    case IconName.ConvenienceStore24h:
      return <MaterialIcon icon="local_convenience_store" {...props} />
    case IconName.CoffeeAlt:
    case IconName.CoffeeInReceptionAtCharge:
      return <MaterialIcon icon="coffee" {...props} />
    case IconName.Concierge:
      return <MaterialIcon icon="concierge" {...props} />
    case IconName.Cultural:
      return <MaterialIcon icon="theater_comedy" {...props} />
    case IconName.Diamond:
      return <MaterialIcon icon="diamond" {...props} />
    case IconName.Directions:
      return <MaterialIcon icon="directions" {...props} />
    case IconName.DoorOpen:
      return <MaterialIcon icon="meeting_room" {...props} />
    case IconName.Dresser:
      return <MaterialIcon icon="dresser" {...props} />
    case IconName.ElectricBike:
      return <MaterialIcon icon="electric_bike" {...props} />
    case IconName.ElectricCar:
      return <MaterialIcon icon="electric_car" {...props} />
    case IconName.Email:
      return <MaterialIcon icon="mail" {...props} />
    case IconName.EyeHide:
      return <MaterialIcon icon="visibility_off" {...props} />
    case IconName.EyeShow:
      return <MaterialIcon icon="visibility" {...props} />
    case IconName.Fan:
      return <MaterialIcon icon="mode_fan" {...props} />
    case IconName.Facebook:
      return <FacebookIcon {...props} />
    case IconName.Fitness:
      return <MaterialIcon icon="exercise" {...props} />
    case IconName.Footstool:
      return <FootStoolIcon {...props} />
    case IconName.Gallery:
      return <MaterialIcon icon="filter" {...props} />
    case IconName.Garage:
      return <MaterialIcon icon="garage" {...props} />
    case IconName.Gift:
      return <MaterialIcon icon="featured_seasonal_and_gifts" {...props} />
    case IconName.Theatre:
      return <MaterialIcon icon="theater_comedy" {...props} />
    case IconName.Sports:
      return <MaterialIcon icon="sports_tennis" {...props} />
    case IconName.Bike:
      return <MaterialIcon icon="pedal_bike" {...props} />
    case IconName.Globe:
      return <MaterialIcon icon="globe" {...props} />
    case IconName.Golf:
      return <MaterialIcon icon="sports_golf" {...props} />
    case IconName.Dining:
      return <MaterialIcon icon="dining" {...props} />
    case IconName.Hanger:
      return <MaterialIcon icon="checkroom" {...props} />
    case IconName.HangerAlt:
      return <MaterialIcon icon="styler" {...props} />
    case IconName.Heat:
      return <MaterialIcon icon="heat" {...props} />
    case IconName.House:
      return <MaterialIcon icon="home" {...props} />
    case IconName.Image:
      return <MaterialIcon icon="imagesmode" {...props} />
    case IconName.InfoCircle:
      return <MaterialIcon icon="info" {...props} />
    case IconName.Instagram:
      return <InstagramIcon {...props} />
    case IconName.Kayaking:
      return <MaterialIcon icon="kayaking" {...props} />
    case IconName.Kettle:
      return <MaterialIcon icon="kettle" {...props} />
    case IconName.Lamp:
      return <MaterialIcon icon="floor_lamp" {...props} />
    case IconName.LaundryMachine:
      return <MaterialIcon icon="local_laundry_service" {...props} />
    case IconName.Link:
      return <MaterialIcon icon="link" {...props} />
    case IconName.LocalBar:
      return <MaterialIcon icon="local_bar" {...props} />
    case IconName.Location:
      return <MaterialIcon icon="location_on" {...props} />
    case IconName.Lock:
      return <MaterialIcon icon="lock" {...props} />
    case IconName.Map:
      return <MaterialIcon icon="map" {...props} />
    case IconName.Minus:
      return <MaterialIcon icon="remove" {...props} />
    case IconName.Museum:
      return <MaterialIcon icon="museum" {...props} />
    case IconName.Nature:
      return <MaterialIcon icon="nature" {...props} />
    case IconName.Nightlife:
      return <MaterialIcon icon="nightlife" {...props} />
    case IconName.NoSmoking:
      return <MaterialIcon icon="smoke_free" {...props} />
    case IconName.OpenInNew:
      return <MaterialIcon icon="open_in_new" {...props} />
    case IconName.OpenInNewSmall:
      return <MaterialIcon icon="open_in_new" {...props} />
    case IconName.OutdoorFurniture:
    case IconName.Deck:
      return <MaterialIcon icon="deck" {...props} />
    case IconName.Parking:
      return <MaterialIcon icon="local_parking" {...props} />
    case IconName.Person:
      return <MaterialIcon icon="person" {...props} />
    case IconName.ParkingOutdoor:
      return <MaterialIcon icon="emoji_transportation" {...props} />
    case IconName.Pets:
      return <MaterialIcon icon="pets" {...props} />
    case IconName.Plus:
      return <MaterialIcon icon="add" {...props} />
    case IconName.PlusCircle:
      return <MaterialIcon icon="add_circle" {...props} />
    case IconName.PriceTag:
      return <MaterialIcon icon="sell" {...props} />
    case IconName.Restaurant:
      return <MaterialIcon icon="restaurant" {...props} />
    case IconName.RoomService:
      return <MaterialIcon icon="room_service" {...props} />
    case IconName.Smoking:
      return <MaterialIcon icon="smoking_rooms" {...props} />
    case IconName.Spa:
      return <MaterialIcon icon="spa" {...props} />
    case IconName.Sauna:
      return <MaterialIcon icon="sauna" {...props} />
    case IconName.Search:
      return <MaterialIcon icon="search" {...props} />
    case IconName.Service:
      return <MaterialIcon icon="call_quality" {...props} />
    case IconName.Elevator:
      return <MaterialIcon icon="elevator" {...props} />
    case IconName.Shopping:
      return <MaterialIcon icon="shopping_bag" {...props} />
    case IconName.Skateboarding:
      return <MaterialIcon icon="skateboarding" {...props} />
    case IconName.Snowflake:
      return <MaterialIcon icon="asterisk" {...props} />
    case IconName.Star:
      return <MaterialIcon icon="star" {...props} />
    case IconName.StarFilled:
      return <MaterialIcon icon="star" isFilled {...props} />
    case IconName.Street:
      return <RoadIcon {...props} />
    case IconName.Swim:
      return <MaterialIcon icon="pool" {...props} />
    case IconName.Thermostat:
      return <MaterialIcon icon="device_thermostat" {...props} />
    case IconName.Tshirt:
      return <MaterialIcon icon="apparel" {...props} />
    case IconName.Train:
      return <MaterialIcon icon="train" {...props} />
    case IconName.Tripadvisor:
      return <TripadvisorIcon {...props} />
    case IconName.TshirtWash:
      return <MaterialIcon icon="laundry" {...props} />
    case IconName.TvCasting:
      return <MaterialIcon icon="connected_tv" {...props} />
    case IconName.WarningTriangle:
      return <MaterialIcon icon="warning" {...props} />
    case IconName.Wifi:
      return <MaterialIcon icon="wifi" {...props} />
    case IconName.Breakfast:
      return <MaterialIcon icon="bakery_dining" {...props} />
    case IconName.Jacuzzi:
      return <MaterialIcon icon="hot_tub" {...props} />
    case IconName.DirectDial:
      return <MaterialIcon icon="call" {...props} />
    case IconName.CoffeeShop:
      return <MaterialIcon icon="local_cafe" {...props} />
    default:
      return null
  }
}
