package com.emonster.taroaichat.domain;

import static org.assertj.core.api.Assertions.assertThat;

public class ChatMessageAsserts {

    /**
     * Asserts that the entity has all properties (fields/relationships) set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertChatMessageAllPropertiesEquals(ChatMessage expected, ChatMessage actual) {
        assertChatMessageAutoGeneratedPropertiesEquals(expected, actual);
        assertChatMessageAllUpdatablePropertiesEquals(expected, actual);
    }

    /**
     * Asserts that the entity has all updatable properties (fields/relationships) set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertChatMessageAllUpdatablePropertiesEquals(ChatMessage expected, ChatMessage actual) {
        assertChatMessageUpdatableFieldsEquals(expected, actual);
        assertChatMessageUpdatableRelationshipsEquals(expected, actual);
    }

    /**
     * Asserts that the entity has all the auto generated properties (fields/relationships) set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertChatMessageAutoGeneratedPropertiesEquals(ChatMessage expected, ChatMessage actual) {
        assertThat(actual)
            .as("Verify ChatMessage auto generated properties")
            .satisfies(a -> assertThat(a.getId()).as("check id").isEqualTo(expected.getId()))
            .satisfies(a -> assertThat(a.getCreatedBy()).as("check createdBy").isEqualTo(expected.getCreatedBy()))
            .satisfies(a -> assertThat(a.getCreatedDate()).as("check createdDate").isEqualTo(expected.getCreatedDate()));
    }

    /**
     * Asserts that the entity has all the updatable fields set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertChatMessageUpdatableFieldsEquals(ChatMessage expected, ChatMessage actual) {
        assertThat(actual)
            .as("Verify ChatMessage relevant properties")
            .satisfies(a -> assertThat(a.getSender()).as("check sender").isEqualTo(expected.getSender()))
            .satisfies(a -> assertThat(a.getMessage()).as("check message").isEqualTo(expected.getMessage()))
            .satisfies(a -> assertThat(a.getTimestamp()).as("check timestamp").isEqualTo(expected.getTimestamp()));
    }

    /**
     * Asserts that the entity has all the updatable relationships set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertChatMessageUpdatableRelationshipsEquals(ChatMessage expected, ChatMessage actual) {
        assertThat(actual)
            .as("Verify ChatMessage relationships")
            .satisfies(a -> assertThat(a.getSession()).as("check session").isEqualTo(expected.getSession()));
    }
}
