from django.urls import path, include
from rest_framework import routers

from apps.station.views import (
    stations_views,
    station_request_report_views,
    station_bookmark_views,
    station_checkIn_rating_views,
    nearby_places_views,
    station_rejection_views,
)

router = routers.DefaultRouter(trailing_slash=False)


router.register(
    r"create",
    stations_views.StationCreateUpdateModelViewSet,
    basename="station-create-update",
)

router.register(
    r"connector",
    stations_views.StationConnectorViewSet,
    basename="station-connector",
)

router.register(
    r"(?P<station_id>\d+)/media",
    stations_views.StationMediaViewSet,
    basename="station-media",
)

router.register(
    r"checkin",
    station_checkIn_rating_views.StationCheckInModelViewSet,
    basename="station-checkin",
)

router.register(
    r"rating",
    station_checkIn_rating_views.CreateStationRatingModelViewSet,
    basename="create-station-rating",
)

router.register(
    r"(?P<station_id>\d+)/rating",
    station_checkIn_rating_views.StationRatingModelViewSet,
    basename="station-rating",
)

router.register(
    r"rating/(?P<rating_id>\d+)/media",
    station_checkIn_rating_views.CreateRatingMediaModelViewSet,
    basename="station-rating-media",
)

router.register(
    r"verification",
    stations_views.StationVerificationModelViewSet,
    basename="station-verify",
)


router.register(
    r"edit/request",
    station_request_report_views.StationEditRequestModelViewSet,
    basename="station-edit-request",
)
router.register(
    r"edit/request/(?P<station_id>\d+)/media",
    station_request_report_views.StationEditRequestMediaModelViewSet,
    basename="station-edit-request-media",
)

router.register(
    r"bookmark",
    station_bookmark_views.StationBookmarkModelViewSet,
    basename="station-bookmark",
)

router.register(
    r"reasons",
    station_request_report_views.StationReportReasonModelViewSet,
    basename="station-reasons",
)

router.register(
    r"report",
    station_request_report_views.StationReportModelViewSet,
    basename="station-report",
)

router.register(
    r"unverified/media",
    stations_views.UnverifiedStationMediaViewSet,
    basename="unverified-all-media",
)

router.register(
    r"unverified/rating/media",
    station_checkIn_rating_views.UnverifiedStationRatingMediaViewSet,
    basename="rating-all-media",
)

router.register(
    r"rejection",
    station_rejection_views.RejectedStationModelAPIView,
    basename="station-rejection",
)


router.register(
    r"",
    stations_views.StationModelViewSet,
    basename="station",
)


urlpatterns = [
    path(
        "detail/<str:slug>",
        stations_views.StationRetrieveAPIView.as_view(),
        name="get_by_slug",
    ),
    path(
        "upload/csv", stations_views.StationCSVUploadView.as_view(), name="upload_csv"
    ),
    path(
        "<int:pk>/rating-count",
        station_checkIn_rating_views.StationCheckInCalculationAPIView.as_view(),
        name="station-rating-count",
    ),
    path(
        "bookmarks/<int:station_id>/delete",
        station_bookmark_views.DeleteBookmarkStationAPIView.as_view(),
        name="delete-bookmark-station",
    ),
    path(
        "<int:station_id>/photos",
        stations_views.StationPhotoAPIView.as_view(),
        name="station-photos",
    ),
    path(
        "nearby/places",
        nearby_places_views.NearbyPlacesAPIView.as_view(),
        name="nearby-places",
    ),
    path(
        "lat-lng/to/address",
        nearby_places_views.GetAddressFromLatLngAPIView.as_view(),
        name="lat-lng-to-address",
    ),
    path(
        "address/to/lat-lng",
        nearby_places_views.GetLatLngFromAddressAPIView.as_view(),
        name="address-to-lat-lng",
    ),
    path(
        "places/search",
        nearby_places_views.GetPlacesAPIView.as_view(),
        name="places-search",
    ),
    path("", include(router.urls)),
]
