package com.emonster.taroaichat.domain;

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

public class TarotSessionAsserts {

    /**
     * Asserts that the entity has all properties (fields/relationships) set.
     *
     * @param expected the expected entity
     * @param actual the actual entity
     */
    public static void assertTarotSessionAllPropertiesEquals(TarotSession expected, TarotSession actual) {
        assertTarotSessionAutoGeneratedPropertiesEquals(expected, actual);
        assertTarotSessionAllUpdatablePropertiesEquals(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 assertTarotSessionAllUpdatablePropertiesEquals(TarotSession expected, TarotSession actual) {
        assertTarotSessionUpdatableFieldsEquals(expected, actual);
        assertTarotSessionUpdatableRelationshipsEquals(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 assertTarotSessionAutoGeneratedPropertiesEquals(TarotSession expected, TarotSession actual) {
        assertThat(actual)
            .as("Verify TarotSession 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 assertTarotSessionUpdatableFieldsEquals(TarotSession expected, TarotSession actual) {
        assertThat(actual)
            .as("Verify TarotSession relevant properties")
            .satisfies(a -> assertThat(a.getCards()).as("check cards").isEqualTo(expected.getCards()))
            .satisfies(a -> assertThat(a.getInterpretation()).as("check interpretation").isEqualTo(expected.getInterpretation()))
            .satisfies(a -> assertThat(a.getStatus()).as("check status").isEqualTo(expected.getStatus()))
            .satisfies(a -> assertThat(a.getFeedback()).as("check feedback").isEqualTo(expected.getFeedback()))
            .satisfies(a -> assertThat(a.getRating()).as("check rating").isEqualTo(expected.getRating()))
            .satisfies(a -> assertThat(a.getSaved()).as("check saved").isEqualTo(expected.getSaved()))
            .satisfies(a -> assertThat(a.getSummary()).as("check summary").isEqualTo(expected.getSummary()))
            .satisfies(a -> assertThat(a.getScreenshotUrl()).as("check screenshotUrl").isEqualTo(expected.getScreenshotUrl()))
            .satisfies(a -> assertThat(a.getCompletedAt()).as("check completedAt").isEqualTo(expected.getCompletedAt()));
    }

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