<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cbdoro.mods.disaster.mapper.DisasterManagerMapper">

    <resultMap id="DisasterManagerMap" type="cbdoro.mods.disaster.vo.DisasterManagerVO">
        <id     property="ftrIdn"       column="FTR_IDN"/>
        <result property="dstCap"       column="DST_CAP"/>
        <result property="dstAdr"       column="DST_ADR"/>
        <result property="dstLoc"       column="DST_LOC"/>
        <result property="dstCrtTime"   column="DST_CRT_TIME"/>
        <result property="dstBeginUp"   column="DST_BEGIN_UP"/>
        <result property="dstEndUp"     column="DST_END_UP"/>
        <result property="dstRgbLoc"    column="DST_RGB_LOC"/>
        <result property="dstRgbPrc"    column="DST_RGB_PRC"/>
        <result property="dstRgbCnt"    column="DST_RGB_CNT"/>
        <result property="dstRgbSize"   column="DST_RGB_SIZE"/>
        <result property="dstDrone"     column="DST_DRONE"/>
        <result property="dstDroneElev" column="DST_DRONE_ELEV"/>
        <result property="dstPath"      column="DST_PATH"/>
        <result property="dstBgo"       column="DST_BGO"/>
        <result property="dstMveYn"       column="DST_MVE_YN"/>
        <result property="dstThumbYn"       column="DST_THUMB_YN"/>
        <result property="grpId"       column="GRP_ID"/>
        <result property="grpName"       column="GRP_NAME"/>
    </resultMap>
	<insert id="insertDroneVod" parameterType="cbdoro.mods.disaster.vo.DroneVodVO">
		INSERT INTO drone_vod_log (
			channel_idx,
			drone_name,
			user_title,
			file_path,
			file_name,
			recorded_at
		) VALUES (
			#{channelIdx},
			CONCAT('drone', #{channelIdx}),
			#{userTitle},
			#{filePath},
			#{fileName},
			NOW()
		)
	</insert>
	
	<select id="selectVideoList" parameterType="String" resultType="cbdoro.mods.disaster.vo.DisasterVideoVO">
        SELECT 
            VIDEO_ID    AS videoId,
            FTR_IDN     AS ftrIdn,
            FILE_NAME   AS fileName,
            ORG_NAME    AS orgName,
            FILE_SIZE   AS fileSize
        FROM 
            DISASTER_VIDEO
        WHERE 
            FTR_IDN = #{ftrIdn}
        ORDER BY 
            FILE_NAME ASC
    </select>
	<insert id="insertDisasterVideo" parameterType="cbdoro.mods.disaster.vo.DisasterVideoVO">
    INSERT INTO DISASTER_VIDEO (
        FTR_IDN,
        FILE_NAME,
        ORG_NAME,
        FILE_SIZE,
        REG_DATE
    ) VALUES (
        #{ftrIdn},
        #{fileName},
        #{orgName},
        #{fileSize},
        NOW()
    )
</insert>
	<update id="updateLatestTitle" parameterType="map">
        UPDATE drone_vod_log
        SET user_title = #{title}
        WHERE id = (
            SELECT id FROM (
                SELECT id 
                FROM drone_vod_log 
                WHERE channel_idx = #{channelIdx} 
                  AND user_title LIKE '방송 종료 자동저장%' 
                ORDER BY recorded_at ASC 
                LIMIT 1
            ) AS temp_t
        )
    </update>
    
    <select id="selectVodList" parameterType="int" resultType="cbdoro.mods.disaster.vo.DroneVodVO">
    SELECT 
        id, channel_idx, drone_name, user_title, file_path, file_name, recorded_at
    FROM drone_vod_log
    WHERE channel_idx = #{channelIdx}
    ORDER BY recorded_at DESC
</select>
    <!-- 전체 리스트: 필요하면 ORDER BY 생성일 DESC -->
    <select id="selectDisasterManagerList"
            resultMap="DisasterManagerMap">
      SELECT 
        A.FTR_IDN     AS ftrIdn,
        A.DST_CAP     AS dstCap,
        A.DST_ADR     AS dstAdr,
        A.DST_RGB_LOC AS dstRgbLoc,
        A.DST_RGB_PRC AS dstRgbPrc,
        IFNULL(A.DST_THUMB_YN, 'N') AS dstThumbYn,
        IFNULL(A.DST_MVE_YN,   'N') AS dstMveYn,
        A.DST_BEGIN_UP AS dstBeginUp,
        -- [핵심] 그룹 정보 가져오기
        A.GRP_ID      AS grpId,
        B.GRP_NAME    AS grpName   -- 이 부분이 있어야 폴더 이름이 나옵니다!
        
    FROM 
        DISASTER_MANAGER A
    LEFT JOIN 
        DISASTER_GROUP B ON A.GRP_ID = B.GRP_ID
    ORDER BY 
        -- 그룹이 있는 것들을 먼저, 그 다음 등록순
        (CASE WHEN A.GRP_ID IS NULL OR A.GRP_ID = '' THEN 1 ELSE 0 END),
        B.GRP_ID DESC, 
        A.DST_BEGIN_UP DESC
    </select>
<select id="selectDisasterList1" resultType="DisasterManagerVO">
        SELECT 
            A.FTR_IDN     AS ftrIdn,
            A.DST_CAP     AS dstCap,
            A.DST_ADR     AS dstAdr,
            A.DST_RGB_LOC AS dstRgbLoc,
            A.DST_RGB_PRC AS dstRgbPrc,
            IFNULL(A.DST_THUMB_YN, 'N') AS dstThumbYn,
            IFNULL(A.DST_MVE_YN,   'N') AS dstMveYn,
            A.GRP_ID      AS grpId,
            B.GRP_NAME    AS grpName,
            A.DST_BEGIN_UP AS dstBeginUp
        FROM 
            DISASTER_MANAGER A
        LEFT JOIN
            DISASTER_GROUP B ON A.GRP_ID = B.GRP_ID
        ORDER BY 
            -- 그룹 없는것을 위로, 나머지는 그룹별 -> 최신순
            (CASE WHEN A.GRP_ID IS NULL THEN 0 ELSE 1 END),
            B.GRP_ID DESC, 
            A.DST_BEGIN_UP DESC
    </select>

    <select id="selectGroupList" resultType="cbdoro.mods.disaster.vo.DisasterGroupVO">
        SELECT 
            GRP_ID      AS grpId,
            GRP_NAME    AS grpName,
            REG_DATE    AS regDate
        FROM 
            DISASTER_GROUP
        ORDER BY 
            GRP_ID DESC
    </select>

    <insert id="insertGroup">
        INSERT INTO DISASTER_GROUP (GRP_NAME, REG_DATE)
        VALUES (#{grpName}, NOW())
    </insert>

    <update id="updateProjectGroup" parameterType="map">
        UPDATE DISASTER_MANAGER
        SET 
            GRP_ID = 
            <choose>
                <when test="grpId != null and grpId != ''">
                    #{grpId}
                </when>
                <otherwise>
                    NULL
                </otherwise>
            </choose>
        WHERE 
            FTR_IDN IN
            <foreach collection="idList" item="item" open="(" close=")" separator=",">
                #{item}
            </foreach>
    </update>
    
    <update id="updateGroupNull" parameterType="string">
    UPDATE DISASTER_MANAGER
    SET GRP_ID = NULL
    WHERE GRP_ID = #{grpId}
</update>

<delete id="deleteGroup" parameterType="string">
    DELETE FROM DISASTER_GROUP
    WHERE GRP_ID = #{grpId}
</delete>
    
    
    <!-- 단건 조회 -->
    <select id="selectDisasterManager"
            parameterType="string"
            resultMap="DisasterManagerMap">
        SELECT
            FTR_IDN,
            DST_CAP,
            DST_ADR,
            DST_LOC,
            DST_CRT_TIME,
            DST_BEGIN_UP,
            DST_END_UP,
            DST_RGB_LOC,
            DST_RGB_PRC,
            DST_RGB_CNT,
            DST_RGB_SIZE,
            DST_DRONE,
            DST_DRONE_ELEV,
            DST_PATH,
            DST_MVE_YN,
            DST_THUMB_YN,
            DST_BGO
        FROM DISASTER_MANAGER
        WHERE FTR_IDN = #{ftrIdn}
    </select>
<select id="selectDisasterList" parameterType="map" resultType="DisasterManagerVO">
     SELECT 
        A.FTR_IDN     AS ftrIdn,
        A.DST_CAP     AS dstCap,
        A.DST_ADR     AS dstAdr,
        A.DST_RGB_LOC AS dstRgbLoc,
        A.DST_RGB_PRC AS dstRgbPrc,
        IFNULL(A.DST_THUMB_YN, 'N') AS dstThumbYn,
        IFNULL(A.DST_MVE_YN,   'N') AS dstMveYn,
        A.DST_BEGIN_UP AS dstBeginUp,
        A.DST_END_UP AS dstEndUp,
        -- [핵심] 그룹 정보 가져오기
        A.GRP_ID      AS grpId,
        B.GRP_NAME    AS grpName   -- 이 부분이 있어야 폴더 이름이 나옵니다!
        
    FROM 
        DISASTER_MANAGER A
    LEFT JOIN 
        DISASTER_GROUP B ON A.GRP_ID = B.GRP_ID
    ORDER BY 
        -- 그룹이 있는 것들을 먼저, 그 다음 등록순
        (CASE WHEN A.GRP_ID IS NULL OR A.GRP_ID = '' THEN 1 ELSE 0 END),
        B.GRP_ID DESC, 
        A.DST_BEGIN_UP DESC
    LIMIT #{start}, #{pageSize}
</select>
<select id="selectDisasterCount" parameterType="map" resultType="int">
    SELECT COUNT(*)
    FROM DISASTER_MANAGER
    <where>
        <if test="keyword != null and keyword != ''">
            (
                FTR_IDN LIKE CONCAT('%', #{keyword}, '%') OR
                DST_CAP LIKE CONCAT('%', #{keyword}, '%') OR
                DST_ADR LIKE CONCAT('%', #{keyword}, '%')
            )
        </if>
    </where>
</select>


</mapper>
