-- 기존 제약조건 삭제
DROP INDEX IF EXISTS unique_active_partnership ON VENDOR_INFLUENCER_PARTNERSHIP;

-- 파트너십 테이블 재설계
ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
    ADD COLUMN PARTNERSHIP_CYCLE INT NOT NULL DEFAULT 1 COMMENT '파트너십 사이클 (1: 최초, 2: 첫 재승인, 3: 두번째 재승인 ...)',
    ADD COLUMN PREVIOUS_STATUS VARCHAR(20) NULL COMMENT '이전 상태 (재승인시 사용)',
    ADD COLUMN PREVIOUS_END_DATE DATETIME NULL COMMENT '이전 종료일 (재승인시 사용)';

-- 새로운 복합 유니크 키 추가 (벤더-인플루언서-사이클 별로 활성 파트너십은 하나만 존재)
ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
    ADD CONSTRAINT unique_partnership_cycle 
    UNIQUE KEY (VENDOR_SEQ, INFLUENCER_SEQ, PARTNERSHIP_CYCLE, IS_ACTIVE);

-- 상태 체크 제약조건 추가
ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
    ADD CONSTRAINT chk_status_values 
    CHECK (STATUS IN ('PENDING', 'APPROVED', 'REJECTED', 'TERMINATED'));

-- 활성 상태 체크 제약조건 추가
ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
    ADD CONSTRAINT chk_status_active 
    CHECK ((STATUS = 'TERMINATED' AND IS_ACTIVE = 'N') OR 
           (STATUS IN ('PENDING', 'APPROVED', 'REJECTED') AND IS_ACTIVE IN ('Y', 'N')));

-- 파트너십 사이클 체크 제약조건 추가
ALTER TABLE VENDOR_INFLUENCER_PARTNERSHIP
    ADD CONSTRAINT chk_partnership_cycle 
    CHECK (PARTNERSHIP_CYCLE > 0);

-- 인덱스 추가
CREATE INDEX idx_vendor_influencer_status ON VENDOR_INFLUENCER_PARTNERSHIP(VENDOR_SEQ, INFLUENCER_SEQ, STATUS, IS_ACTIVE);
CREATE INDEX idx_partnership_cycle ON VENDOR_INFLUENCER_PARTNERSHIP(PARTNERSHIP_CYCLE);
