-- ============================================
-- 간단 Seed 데이터 v3 (업로드 테스트용)
-- 시나리오: 마스터 데이터 + 최소 사용자만 / 실제 업로드 파일로 테스트
-- ============================================
-- 설명: 파일 업로드 기능 테스트를 위한 최소 seed 데이터
--       - 마스터 데이터 (마커, SNP, 형질 등) 포함
--       - 사용자/농장 데이터만 최소로 포함
--       - 개체 데이터는 업로드 파일로 생성 예정

-- ============================================
-- PART 0: 스키마 초기화 (선택사항 - 완전히 새로 시작할 때만 사용)
-- ============================================
-- 주의: 아래 주석을 해제하면 모든 테이블과 데이터가 삭제됩니다
-- DROP SCHEMA public CASCADE;
-- CREATE SCHEMA public;
-- GRANT ALL ON SCHEMA public TO postgres;
-- GRANT ALL ON SCHEMA public TO public;

-- ============================================
-- PART 0: ENUM 타입 생성 및 VARCHAR 길이 수정
-- ============================================

-- ENUM 타입이 이미 존재하면 삭제 후 재생성
DROP TYPE IF EXISTS tb_cow_anlys_stat_enum CASCADE;
CREATE TYPE tb_cow_anlys_stat_enum AS ENUM ('친자일치', '친자불일치', '분석불가', '이력제부재');

DROP TYPE IF EXISTS tb_cow_cow_repro_type_enum CASCADE;
CREATE TYPE tb_cow_cow_repro_type_enum AS ENUM ('공란우', '수란우', '인공수정', '도태대상');

DROP TYPE IF EXISTS tb_cow_cow_status_enum CASCADE;
CREATE TYPE tb_cow_cow_status_enum AS ENUM ('정상', '폐사', '도축', '매각');

-- tb_cow 테이블에 컬럼 추가 (이미 있으면 무시)
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS anlys_stat tb_cow_anlys_stat_enum;
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_repro_type tb_cow_cow_repro_type_enum;
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_status tb_cow_cow_status_enum DEFAULT '정상'::tb_cow_cow_status_enum;
ALTER TABLE tb_cow ADD COLUMN IF NOT EXISTS cow_short_no varchar(4);

-- 기타 테이블 컬럼 확장 (테이블 있을 경우만)
ALTER TABLE tb_genome_trait ALTER COLUMN dam TYPE varchar(20);
ALTER TABLE tb_region_genome ALTER COLUMN dam TYPE varchar(20);

-- tb_pedigree 모든 ID 컬럼 확장
ALTER TABLE tb_pedigree
ALTER COLUMN fk_animal_no TYPE varchar(20),
ALTER COLUMN sire_id TYPE varchar(20),
ALTER COLUMN dam_id TYPE varchar(20),
ALTER COLUMN paternal_grandsire_id TYPE varchar(20),
ALTER COLUMN paternal_granddam_id TYPE varchar(20),
ALTER COLUMN maternal_grandsire_id TYPE varchar(20),
ALTER COLUMN maternal_granddam_id TYPE varchar(20);

-- ============================================
-- PART 1: 마스터 데이터 (필수 참조 데이터)
-- ============================================

-- 1. 마커 타입 (2개)
INSERT INTO tb_marker_type (pk_type_cd, type_nm, type_desc, use_yn, reg_dt, updt_dt)
VALUES
  ('QTY', '육량형', '육량 관련 마커 (도체중, 등심단면적 등)', 'Y', NOW(), NOW()),
  ('QLT', '육질형', '육질 관련 마커 (근내지방도, 연도 등)', 'Y', NOW(), NOW())
ON CONFLICT (pk_type_cd) DO NOTHING;

-- 2. 마커 정보 (7개 유전자만 - 각 1개 대표 SNP)
INSERT INTO tb_marker (fk_marker_type, marker_nm, marker_desc, related_trait, snp_cnt, use_yn, favorable_allele, reg_dt, updt_dt)
VALUES
  -- 육량형 (3개)
  ('QTY', 'PLAG1', 'Pleiomorphic adenoma gene 1', '도체중', 1, 'Y', 'G', NOW(), NOW()),
  ('QTY', 'NCAPG2', 'Non-SMC condensin II complex subunit G2', '체구', 1, 'Y', 'T', NOW(), NOW()),
  ('QTY', 'BTB', 'BTB domain containing', '등심단면적', 1, 'Y', 'T', NOW(), NOW()),

  -- 육질형 (4개)
  ('QLT', 'NT5E', '5 prime nucleotidase ecto', '근내지방도', 1, 'Y', 'C', NOW(), NOW()),
  ('QLT', 'SCD', 'Stearoyl-CoA desaturase', '지방산불포화도', 1, 'Y', 'G', NOW(), NOW()),
  ('QLT', 'FASN', 'Fatty acid synthase', '지방합성', 1, 'Y', 'G', NOW(), NOW()),
  ('QLT', 'CAPN1', 'Calpain 1', '연도', 1, 'Y', 'G', NOW(), NOW())
ON CONFLICT DO NOTHING;

-- 3. SNP 정보 (7개 - 각 유전자당 1개 대표 SNP)
INSERT INTO tb_snp_info (snp_nm, chr, position, snp_alleles, reg_dt, updt_dt)
VALUES
  -- 육량형 대표 SNP
  ('14:25016263', '14', 25016263, '[G/C]', NOW(), NOW()),  -- PLAG1 (GG/GC/CC)
  ('7:38528304', '7', 38528304, '[T/G]', NOW(), NOW()),    -- NCAPG2 (TT/TG/GG)
  ('5:45120340', '5', 45120340, '[T/C]', NOW(), NOW()),    -- BTB (TT/TC/CC)

  -- 육질형 대표 SNP
  ('6:58230560', '6', 58230560, '[C/T]', NOW(), NOW()),    -- NT5E (CC/CT/TT)
  ('26:21194784', '26', 21194784, '[G/A]', NOW(), NOW()),  -- SCD (GG/GA/AA)
  ('19:51230120', '19', 51230120, '[G/A]', NOW(), NOW()),  -- FASN (GG/GA/AA)
  ('29:44104889', '29', 44104889, '[G/A]', NOW(), NOW())   -- CAPN1 (GG/GA/AA)
ON CONFLICT (snp_nm) DO NOTHING;

-- 4. 마커-SNP 매핑 (7개 - 각 유전자당 1개 대표 SNP)
INSERT INTO tb_marker_snp (pk_fk_marker_no, pk_fk_snp_no, reg_dt, updt_dt)
SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'PLAG1' AND s.snp_nm = '14:25016263'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'NCAPG2' AND s.snp_nm = '7:38528304'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'BTB' AND s.snp_nm = '5:45120340'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'NT5E' AND s.snp_nm = '6:58230560'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'SCD' AND s.snp_nm = '26:21194784'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'FASN' AND s.snp_nm = '19:51230120'
UNION ALL SELECT m.pk_marker_no, s.pk_snp_no, NOW(), NOW() FROM tb_marker m, tb_snp_info s WHERE m.marker_nm = 'CAPN1' AND s.snp_nm = '29:44104889'
ON CONFLICT DO NOTHING;

-- 5. 형질 정보 (35개 경제형질)
INSERT INTO tb_genome_trait_info (trait_nm, trait_ctgry, trait_desc, use_yn, reg_dt, updt_dt)
VALUES
  -- 성장형질 (6개)
  ('이유체중', '성장', '송아지 이유시 체중 (kg)', 'Y', NOW(), NOW()),
  ('육성체중', '성장', '육성기 체중 (kg)', 'Y', NOW(), NOW()),
  ('12개월체중', '성장', '12개월령 체중 (kg)', 'Y', NOW(), NOW()),
  ('일당증체량', '성장', '일일 체중 증가량 (kg/day)', 'Y', NOW(), NOW()),
  ('체고', '성장', '어깨높이 (cm)', 'Y', NOW(), NOW()),
  ('체장', '성장', '몸통 길이 (cm)', 'Y', NOW(), NOW()),

  -- 도체형질 (10개)
  ('도체중', '도체', '도축 후 도체 무게 (kg)', 'Y', NOW(), NOW()),
  ('등지방두께', '도체', '등 부위 지방 두께 (mm)', 'Y', NOW(), NOW()),
  ('등심단면적', '도체', '등심 단면적 (cm²)', 'Y', NOW(), NOW()),
  ('근내지방도', '도체', '마블링 점수 (1~9)', 'Y', NOW(), NOW()),
  ('육량지수', '도체', '고기 생산량 지수', 'Y', NOW(), NOW()),
  ('육색', '도체', '고기 색깔 (1~9)', 'Y', NOW(), NOW()),
  ('지방색', '도체', '지방 색깔 (1~9)', 'Y', NOW(), NOW()),
  ('조직감', '도체', '고기 조직감 (1~3)', 'Y', NOW(), NOW()),
  ('성숙도', '도체', '고기 성숙 정도 (1~9)', 'Y', NOW(), NOW()),
  ('보수력', '도체', '수분 보유 능력 (%)', 'Y', NOW(), NOW()),

  -- 육질형질 (7개)
  ('연도', '육질', '고기 부드러운 정도', 'Y', NOW(), NOW()),
  ('다즙성', '육질', '육즙 함량', 'Y', NOW(), NOW()),
  ('풍미', '육질', '고기 맛', 'Y', NOW(), NOW()),
  ('가열감량', '육질', '조리시 손실율 (%)', 'Y', NOW(), NOW()),
  ('전단력', '육질', '자르는 힘 (kgf)', 'Y', NOW(), NOW()),
  ('지방산불포화도', '육질', '불포화 지방산 비율 (%)', 'Y', NOW(), NOW()),
  ('오메가3비율', '육질', '오메가3 지방산 비율 (%)', 'Y', NOW(), NOW()),

  -- 번식형질 (6개)
  ('초산월령', '번식', '첫 분만 월령 (개월)', 'Y', NOW(), NOW()),
  ('분만간격', '번식', '분만 사이 기간 (일)', 'Y', NOW(), NOW()),
  ('수태율', '번식', '임신 성공률 (%)', 'Y', NOW(), NOW()),
  ('분만난이도', '번식', '분만 어려움 정도 (1~5)', 'Y', NOW(), NOW()),
  ('송아지생존율', '번식', '신생 송아지 생존율 (%)', 'Y', NOW(), NOW()),
  ('모성능력', '번식', '어미소 양육 능력', 'Y', NOW(), NOW()),

  -- 건강형질 (6개)
  ('체세포수', '건강', '우유 체세포 수 (천개/ml)', 'Y', NOW(), NOW()),
  ('질병저항성', '건강', '질병 저항 능력', 'Y', NOW(), NOW()),
  ('발굽건강', '건강', '발굽 건강 상태', 'Y', NOW(), NOW()),
  ('유방염저항성', '건강', '유방염 저항성', 'Y', NOW(), NOW()),
  ('호흡기질환저항성', '건강', '호흡기 질환 저항성', 'Y', NOW(), NOW()),
  ('대사질환저항성', '건강', '대사 질환 저항성', 'Y', NOW(), NOW())
ON CONFLICT (trait_nm) DO NOTHING;

-- ============================================
-- PART 2: 사용자 및 농장 데이터 (최소)
-- ============================================

-- 사용자 2명 (ADMIN + TEST 농장주)
INSERT INTO tb_user (user_id, user_password, user_nm, user_role, hp_no, email, addr, reg_dt, updt_dt)
VALUES
  ('admin', '$2b$10$abcdefghijklmnopqrstuvwxyz123456789', '관리자', 'ADMIN', '010-0000-0000', 'admin@test.com', '서울시', NOW(), NOW()),
  ('testuser', '$2b$10$abcdefghijklmnopqrstuvwxyz123456789', '테스트농장주', 'FARM_OWNER', '010-1111-1111', 'test@test.com', '충북 청주시', NOW(), NOW())
ON CONFLICT (user_id) DO NOTHING;

-- 농장 1개 (테스트용)
INSERT INTO tb_farm (farm_nm, farm_addr, owner_nm, contact, reg_dt, updt_dt)
VALUES
  ('테스트농장', '충북 청주시 상당구', '테스트농장주', '010-1111-1111', NOW(), NOW())
ON CONFLICT DO NOTHING;

-- ============================================
-- PART 3: KPN (종축 수소) 데이터 (최소)
-- ============================================

-- KPN 수소 2마리만 (부계/모계 참조용)
INSERT INTO tb_kpn (kpn_no, kpn_nm, birth_dt, sire, dam, reg_dt, updt_dt)
VALUES
  ('KPN001001001001', '종축수소1', '2018-01-15', NULL, NULL, NOW(), NOW()),
  ('KPN001001001002', '종축수소2', '2019-03-20', NULL, NULL, NOW(), NOW())
ON CONFLICT (kpn_no) DO NOTHING;

-- ============================================
-- 업로드 테스트용 안내
-- ============================================
-- 다음 단계: 파일 업로드로 데이터 생성
--
-- 1. 개체정보 파일 업로드 (fileType: "유전자")
--    → 농장주명 + 개체번호 매핑 정보
--    → tb_cow 테이블에 저장
--
-- 2. 유전능력평가 결과 업로드 (fileType: "유전체")
--    → 533두 유전체 분석 데이터 (CSV)
--    → tb_genome_cow, tb_genome_trait 테이블에 저장
--
-- 3. SNP 타이핑 결과 업로드 (fileType: "유전자")
--    → 개체별 SNP 유전자형
--    → tb_snp_cow 테이블에 저장
--
-- 4. MPT 분석결과 업로드 (fileType: "혈액대사검사", 선택사항)
--    → 혈액 샘플 분석 결과
--    → tb_repro_mpt 테이블에 저장
--
-- 업로드 후 확인 쿼리:
-- SELECT * FROM tb_uploadfile WHERE file_type IN ('유전자', '유전체', '혈액대사검사') ORDER BY reg_dt DESC;
-- SELECT count(*) FROM tb_cow;
-- SELECT count(*) FROM tb_genome_cow;
-- SELECT count(*) FROM tb_snp_cow;
-- SELECT farm_owner, count(*) FROM tb_cow GROUP BY farm_owner;

-- ============================================
-- 완료
-- ============================================
-- v3 seed 데이터 생성 완료
-- 마스터 데이터만 포함, 실제 개체 데이터는 파일 업로드로 생성 예정
