package de.accso.flexinale.ticketing_api_contract.api_contract.model;

import de.accso.flexinale.common.shared_kernel.DoNotCheckInArchitectureTests;
import de.accso.flexinale.common.shared_kernel.EqualsByContent;
import de.accso.flexinale.common.shared_kernel.Identifiable;
import de.accso.flexinale.common.shared_kernel.Versionable;
import org.apache.commons.lang3.builder.EqualsBuilder;

import java.io.Serializable;

@SuppressWarnings("unused")
public record TicketTO(Id id, Version version,
                       Id filmId, Id vorfuehrungId,
                       Id besucherId,
                       @DoNotCheckInArchitectureTests VerkaufsKanal verkaufsKanal)
        implements Identifiable, Versionable, EqualsByContent, Serializable
{
    public enum VerkaufsKanal {
        ONLINE,
        ZENTRAL,
        KINOKASSE
    }

    @Override
    public boolean equalsByContent(final Object o) {
        if (this == o) {return true;}

        if (o == null || getClass() != o.getClass()) {return false;}

        TicketTO that = (TicketTO) o;

        return new EqualsBuilder()
                .append(id, that.id)
                .append(filmId, that.filmId)
                .append(vorfuehrungId, that.vorfuehrungId)
                .append(besucherId, that.besucherId)
                .append(verkaufsKanal, that.verkaufsKanal)
                .isEquals();
    }
}
