#!/bin/bash

# ==========================================================
# MySQL 인증테이블 내보내기 스크립트
# 작성일: 2026-03-29
# 설명: 원본 서버의 HM, EM 테이블을 인증 서버의 HZ, EZ로 복사
# ==========================================================

# [설정] MySQL 접속 정보
SRC_USER="root"
SRC_PW="@smartserver"
TGT_USER="root"
TGT_PW="@smartserver"
TGT_DB="CUBE_MASTER"

# [기본값 설정]
DEF_SRC_IP="192.168.56.202"
DEF_TGT_IP="192.168.56.200"
DEF_DB_LIST=""

# 웹(파라미터) / 터미널(대화형) 분기
if [ "$#" -gt 0 ]; then
    # 파라미터가 있을 경우 (웹 모드)
    SRC_IP=${1:-$DEF_SRC_IP}
    TGT_IP=${2:-$DEF_TGT_IP}
    DB_LIST=${3:-$DEF_DB_LIST}
    DB_LIST=$(echo "$DB_LIST" | tr '[:lower:]' '[:upper:]')
else
    # 파라미터가 없을 경우 (대화형 모드)
    echo "----------------------------------------------------"
    echo "  인증테이블 내보내기를 시작합니다."
    echo "  (입력 없이 Enter를 누르면 기본값이 사용됩니다.)"
    echo "----------------------------------------------------"

    read -p "1. 원본 서버 IP (기본: $DEF_SRC_IP): " SRC_IP
    SRC_IP=${SRC_IP:-$DEF_SRC_IP}

    read -p "2. 인증 서버 IP (기본: $DEF_TGT_IP): " TGT_IP
    TGT_IP=${TGT_IP:-$DEF_TGT_IP}

    read -p "3. 인증 데이터베이스 (기본: 데이터베이스 전체): " DB_LIST
    DB_LIST=${DB_LIST:-$DEF_DB_LIST}
    DB_LIST=$(echo "$DB_LIST" | tr '[:lower:]' '[:upper:]')

    echo ""
    echo "----------------------------------------------------"
    echo " [입력 정보 확인]"
    echo " > 원본 서버 IP: $SRC_IP"
    echo " > 인증 서버 IP: $TGT_IP"
    echo "----------------------------------------------------"
    read -p " 위 정보를 확인하셨습니까? (Enter를 누르면 시작합니다) " CONFIRM
fi

# 전체 DB 여부 플래그
IS_ALL_DB=0

if [ -z "$DB_LIST" ]; then
 IS_ALL_DB=1
 MYSQL_PWD="$SRC_PW" mysql -h "$SRC_IP" -u "$SRC_USER" -e "SHOW DATABASES;" 2>/dev/null > /tmp/cert_db_list.txt
 DB_LIST=$(cat /tmp/cert_db_list.txt | grep -Ev "(Database|information_schema|performance_schema|mysql|sys|dbo|CUBE_MASTER)" | tr '\n' ',' | sed 's/,$//')
 rm -f /tmp/cert_db_list.txt
fi

DB_ARRAY=(${DB_LIST//,/ })

MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" -e "CREATE DATABASE IF NOT EXISTS \`${TGT_DB}\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" 2>/dev/null

if [ "$IS_ALL_DB" -eq 1 ]; then
 echo " > 전체 데이터베이스 인증: 기존 HZ, EZ 테이블을 초기화(삭제)합니다."
 MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" "$TGT_DB" -e "DROP TABLE IF EXISTS HZ, EZ;" 2>/dev/null
fi

CREATE_SQL="
CREATE TABLE IF NOT EXISTS \`${TGT_DB}\`.HZ (
 HM01 INT          NOT NULL COMMENT '병원코드',
 HM02 INT          NOT NULL COMMENT '네트워크코드(0,1,2)',
 HM03 INT          NOT NULL COMMENT '삭제유무',
 HM04 VARCHAR(100) NOT NULL COMMENT '최초입력일시',
 HM05 VARCHAR(100) NOT NULL COMMENT '최종변경일시',
 HM06 VARCHAR(300) NOT NULL COMMENT '입력변경정보',
 HM07 VARCHAR(100) NOT NULL COMMENT '병원코드명 데이터베이스이름',
 HM08 VARCHAR(100) NOT NULL COMMENT '병원별칭',
 HM09 VARCHAR(100) NOT NULL COMMENT '병원이름',
 HM10 VARCHAR(100) NOT NULL COMMENT '사업자번호',
 HM11 VARCHAR(100) NOT NULL COMMENT '대표자명',
 HM12 VARCHAR(100) NOT NULL COMMENT '개업연월일',
 HM13 VARCHAR(100) NOT NULL COMMENT '전화번호',
 HM14 VARCHAR(100) NOT NULL COMMENT '팩스번호',
 HM15 VARCHAR(100) NOT NULL COMMENT '우편번호|주소|상세주소',
 HM16 VARCHAR(100) NOT NULL COMMENT '업태',
 HM17 VARCHAR(100) NOT NULL COMMENT '업종',
 HM18 VARCHAR(100) NOT NULL COMMENT '홈페이지',
 HM19 VARCHAR(100) NOT NULL COMMENT '요양기관번호',
 HM20 VARCHAR(100) NOT NULL COMMENT '추가기능',
 HM21 VARCHAR(100) NOT NULL COMMENT '예약알림시점',
 HM22 VARCHAR(100) NOT NULL COMMENT '예약알림시간',
 HM23 VARCHAR(2000) NOT NULL COMMENT '예약알림문자메시지',
 HM24 TEXT         NOT NULL COMMENT '환경설정 예약시간'
);
CREATE TABLE IF NOT EXISTS \`${TGT_DB}\`.EZ (
 EM01 INT          NOT NULL COMMENT '사원코드',
 EM02 INT          NOT NULL COMMENT '병원코드',
 EM03 INT          NOT NULL COMMENT '삭제유무',
 EM04 VARCHAR(100) NOT NULL COMMENT '최초입력일시',
 EM05 VARCHAR(100) NOT NULL COMMENT '최종변경일시',
 EM06 VARCHAR(300) NOT NULL COMMENT '입력변경정보',
 EM07 VARCHAR(100) NOT NULL COMMENT '병원코드명 데이터베이스이름',
 EM08 VARCHAR(100) NOT NULL COMMENT '사원계정',
 EM09 VARCHAR(255) NOT NULL COMMENT '사원비밀번호',
 EM10 VARCHAR(100) NOT NULL COMMENT '사원이름',
 EM11 VARCHAR(100) NOT NULL COMMENT '주민등록번호',
 EM12 VARCHAR(100) NOT NULL COMMENT '휴대폰번호',
 EM13 VARCHAR(100) NOT NULL COMMENT '입사일자',
 EM14 VARCHAR(100) NOT NULL COMMENT '퇴사일자',
 EM15 VARCHAR(100) NOT NULL COMMENT '사원부서이름',
 EM16 VARCHAR(100) NOT NULL COMMENT '사원직급이름',
 EM17 VARCHAR(100) NOT NULL COMMENT '의사면허번호',
 EM18 INT          NOT NULL COMMENT '정렬번호',
 EM19 TEXT         NOT NULL COMMENT '사원설정',
 EM20 TEXT         NOT NULL COMMENT '사원권한',
 EM21 INT          NOT NULL COMMENT '인증권한',
 EM22 VARCHAR(255) NOT NULL COMMENT '최종로그인',
 EM23 VARCHAR(255) NOT NULL COMMENT '도장파일이름',
 INDEX IDX_EM_SEARCH (EM02, EM03, EM10),
 INDEX IDX_EM_ID (EM02, EM03, EM08),
 INDEX IDX_EM_SORT (EM02, EM03, EM18, EM13)
);
CREATE TABLE IF NOT EXISTS \`${TGT_DB}\`.LZ (
 LX01 INT AUTO_INCREMENT    COMMENT '로그코드',
 LX02 INT          NOT NULL COMMENT '병원코드 (HM.HM01)',
 LX03 INT          NOT NULL COMMENT '사원코드 (EM.EM01)',
 LX04 VARCHAR(100) NOT NULL COMMENT '사원계정/휴대폰번호',
 LX05 VARCHAR(100) NOT NULL COMMENT '사원이름',
 LX06 VARCHAR(100) NOT NULL COMMENT '로그인일시',
 LX07 VARCHAR(100) NOT NULL COMMENT '로그인상태',
 LX08 VARCHAR(100) NOT NULL COMMENT 'IP주소',
 LX09 VARCHAR(100) NOT NULL COMMENT '운영체제',
 LX10 VARCHAR(100) NOT NULL COMMENT '브라우저',
 LX11 TEXT         NOT NULL COMMENT '사용자정보',
 PRIMARY KEY (LX01),
 INDEX IDX_LX_DATE (LX02, LX06)
);
CREATE TABLE IF NOT EXISTS \`${TGT_DB}\`.MZ (
 MS01 INT NOT NULL COMMENT '발송코드',
 MS02 INT NOT NULL COMMENT '병원코드',
 MS03 INT NOT NULL COMMENT '삭제유무',
 MS04 VARCHAR(100) NOT NULL COMMENT '최초입력일시',
 MS05 VARCHAR(100) NOT NULL COMMENT '최종변경일시',
 MS06 VARCHAR(100) NOT NULL COMMENT '병원코드명 데이터베이스이름',
 MS07 INT NOT NULL COMMENT '고객코드',
 MS08 VARCHAR(100) NOT NULL COMMENT '고객이름',
 MS09 VARCHAR(2000) NOT NULL COMMENT '발송내용',
 MS10 VARCHAR(100) NOT NULL COMMENT '수신번호',
 MS11 VARCHAR(100) NOT NULL COMMENT '발송일시',
 MS12 VARCHAR(100) NOT NULL COMMENT '발신번호',
 MS13 VARCHAR(100) NOT NULL COMMENT '발송예약일시',
 MS14 VARCHAR(100) NOT NULL COMMENT '발송상태',
 MS15 VARCHAR(255) NOT NULL COMMENT '발송리턴코드',
 INDEX IDX_MS_DATE (MS02, MS03, MS11),
 INDEX IDX_MS_CUST (MS02, MS03, MS07)
);
"
echo "$CREATE_SQL" | MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" "$TGT_DB" 2>/dev/null

START_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")
echo ""
echo "인증테이블 내보내기 시작: $START_DATETIME"
echo "----------------------------------------------------"

for DB in "${DB_ARRAY[@]}"
do
 echo "[$DB] 데이터를 [$TGT_IP:$TGT_DB] (HZ/EZ)로 복사 중..."
 
 if [ "$IS_ALL_DB" -eq 0 ]; then
  MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" "$TGT_DB" -e "DELETE FROM HZ WHERE HM07='$DB'; DELETE FROM EZ WHERE EM07='$DB';" 2>/dev/null
 fi
 
 MYSQL_PWD="$SRC_PW" mysqldump -h "$SRC_IP" -u "$SRC_USER" --opt --single-transaction --no-create-info --complete-insert "$DB" HM 2>/dev/null | sed 's/`HM`/`HZ`/g' | MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" "$TGT_DB" 2>/dev/null
 MYSQL_PWD="$SRC_PW" mysqldump -h "$SRC_IP" -u "$SRC_USER" --opt --single-transaction --no-create-info --complete-insert "$DB" EM 2>/dev/null | sed 's/`EM`/`EZ`/g' | MYSQL_PWD="$TGT_PW" mysql -h "$TGT_IP" -u "$TGT_USER" "$TGT_DB" 2>/dev/null
 
 echo " > [$DB] 복사 완료"
done

END_DATETIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "----------------------------------------------------"
echo "인증테이블 내보내기 완료: $END_DATETIME"
echo "----------------------------------------------------"