package kr.itn.itnhub.org;

import org.junit.jupiter.api.Test;

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

class OrganizationStatusTest {

    private Organization withApplicant() {
        Organization org = new Organization();
        org.setOrgNo("001");
        org.setOrgName("국제방송교류재단");
        org.setChannelSlug("001");
        org.setApplicantContactId(1L);
        return org;
    }

    @Test
    void 신청기관_담당자가_배정되지_않으면_정보대기다() {
        Organization org = new Organization();
        org.setOrgNo("008");
        org.setOrgName("경찰청_치안정책연구소");

        assertThat(org.getStatus()).isEqualTo(OrgStatus.INFO_PENDING);
    }

    @Test
    void 신청기관_담당자가_배정되면_생성가능이다() {
        assertThat(withApplicant().getStatus()).isEqualTo(OrgStatus.READY);
    }

    @Test
    void 문정원_변호사_배정이_없어도_신청기관_담당자만_있으면_생성가능이다() {
        Organization org = withApplicant();
        org.setMjContactId(null);
        org.setLawyerContactId(null);

        assertThat(org.getStatus()).isEqualTo(OrgStatus.READY);
    }

    @Test
    void 채널이_한쪽만_있으면_부분생성이다() {
        Organization org = withApplicant();
        org.setChannelIdMj("chan-mj");

        assertThat(org.getStatus()).isEqualTo(OrgStatus.PARTIAL);
    }

    @Test
    void 채널이_둘_다_있으면_운영중이다() {
        Organization org = withApplicant();
        org.setChannelIdMj("chan-mj");
        org.setChannelIdLaw("chan-law");

        assertThat(org.getStatus()).isEqualTo(OrgStatus.ACTIVE);
    }

    @Test
    void 신청기관_담당자_배정이_없어도_채널이_있으면_운영중이다() {
        Organization org = new Organization();
        org.setOrgNo("008");
        org.setOrgName("경찰청_치안정책연구소");
        org.setChannelIdMj("chan-mj");
        org.setChannelIdLaw("chan-law");

        assertThat(org.getStatus()).isEqualTo(OrgStatus.ACTIVE);
    }

    @Test
    void hasApplicantAssigned은_배정된_담당자ID_유무만_본다() {
        Organization org = withApplicant();
        assertThat(org.hasApplicantAssigned()).isTrue();

        org.setApplicantContactId(null);
        assertThat(org.hasApplicantAssigned()).isFalse();
    }

    @Test
    void 공백_채널ID는_등록된_채널로_보지_않는다() {
        Organization org = withApplicant();
        org.setChannelIdMj("  ");
        org.setChannelIdLaw("\t");

        assertThat(org.getStatus()).isEqualTo(OrgStatus.READY);
        assertThat(OrgOperationalState.from(org.getApplicantContactId(), "  ", "\t").hasChannel()).isFalse();
    }
}
