// SPDX-FileCopyrightText: Politik im Blick developers
// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
//
// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2

use pib_service_core_types::{
    AgendaItemId, BodyId, BodyPermissionId, MeetingId, MembershipId, OrganizationId, PersonId,
    UserId,
};

#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Resource {
    /// `/me/profile`
    MeProfile,

    /// `/user`
    User,

    /// `/user/{user_id}`
    UserById { user_id: UserId },

    /// `/body`
    Body,

    /// `/body/{body_id}`
    BodyById { body_id: BodyId },

    /// `/body/{body_id}/permission`
    BodyByIdPermission { body_id: BodyId },

    /// `/body/{body_id}/permission/{permission_id}`
    BodyByIdPermissionById {
        body_id: BodyId,
        permission_id: BodyPermissionId,
    },

    /// `/body/{body_id}/person`
    BodyByIdPerson { body_id: BodyId },

    /// `/body/{body_id}/person/{person_id}`
    BodyByIdPersonById {
        body_id: BodyId,
        person_id: PersonId,
    },

    /// `/body/{body_id}/person/{person_id}/membership`
    BodyByIdPersonByIdMembership {
        body_id: BodyId,
        person_id: PersonId,
    },

    /// `/body/{body_id}/person/{person_id}/membership/{membership_id}`
    BodyByIdPersonByIdMembershipById {
        body_id: BodyId,
        person_id: PersonId,
        membership_id: MembershipId,
    },

    /// `/body/{body_id}/organization`
    BodyByIdOrganization { body_id: BodyId },

    /// `/body/{body_id}/organization/{organization_id}`
    BodyByIdOrganizationById {
        body_id: BodyId,
        organization_id: OrganizationId,
    },

    /// `/body/{body_id}/organization/{organization_id}/membership`
    BodyByIdOrganizationByIdMembership {
        body_id: BodyId,
        organization_id: OrganizationId,
    },

    /// `/body/{body_id}/organization/{organization_id}/membership/{membership_id}`
    BodyByIdOrganizationByIdMembershipById {
        body_id: BodyId,
        organization_id: OrganizationId,
        membership_id: MembershipId,
    },

    /// `/body/{body_id}/meeting`
    BodyByIdMeeting { body_id: BodyId },

    /// `/body/{body_id}/meeting/{meeting_id}`
    BodyByIdMeetingById {
        body_id: BodyId,
        meeting_id: MeetingId,
    },

    /// `/body/{body_id}/meeting/{meeting_id}/agenda_item`
    BodyByIdMeetingByIdAgendaItem {
        body_id: BodyId,
        meeting_id: MeetingId,
    },

    /// `/body/{body_id}/meeting/{meeting_id}/agenda_item/{agenda_item_id}`
    BodyByIdMeetingByIdAgendaItemById {
        body_id: BodyId,
        meeting_id: MeetingId,
        agenda_item_id: AgendaItemId,
    },

    /// `/body/{body_id}/membership`
    BodyByIdMembership { body_id: BodyId },

    /// `/body/{body_id}/membership/{membership_id}`
    BodyByIdMembershipById {
        body_id: BodyId,
        membership_id: MembershipId,
    },
}
