<script setup lang="ts">
import {defineComponent, onMounted, PropType, ref} from "vue";
import {PlayList} from "@/types/musicType.ts";
import KuiInput from "@/components/public/kui/kui-input.vue";
import KuiCheckbox from "@/components/public/kui/kui-checkbox.vue";
import message from "@/components/public/kui/message";
import {ErrorCode} from "@/types/apiTypes.ts";
import {api_playlist_add, api_playlist_update} from "@/apis/musicControl.ts";

defineComponent({
  name: "addPlayList"
})

const props = defineProps({
  playlist: {
    type: Object as PropType<PlayList>,
    default: (): PlayList => {
      return {
        id: -1,
        name: '',
        icon: '',
        cover: '',
        description: '',
        playCount: 0,
        trackCount: 0,
        createTime: 0,
        lastPlayTime: 0,
        isTagSearch: false,
        isSync: false,
        isPublic: false,
        isLike: false
      }
    }
  }
})

const emits = defineEmits<{
  (e: 'close' ): void,
  (e: 'submit'): void
}>()

const isEdit = ref(false);
// 歌单名称
const playlistName = ref('');
// 歌单描述
const description = ref('');
// 歌单封面
const cover = ref('');
const isLike = ref(false);
const isPublic = ref(false);


onMounted(()=>{
  if (props.playlist && props.playlist.id > -1)
  {
    console.log(props.playlist);
    isEdit.value = true;
    playlistName.value = props.playlist.name;
    description.value = props.playlist.description;
    cover.value = props.playlist.cover;
    console.log(cover.value);
    isLike.value = !!props.playlist.isLike;
    isPublic.value = !!props.playlist.isPublic;
  }else {
    isEdit.value = false;
  }
})


function closeDialog() {
  emits('close');
}

async function submitHandle() {
  console.log('submit');
  // 创建歌单
  let param: Partial<PlayList> = {
    name: playlistName.value,
    description: description.value,
    cover: cover.value,
    isPublic: isPublic.value,
    isLike: isLike.value
  }
  if (!param.name)
  {
    message.error('歌单名称不能为空');
    return;
  }
  if (isEdit.value)
  {
    // 编辑歌单
    param.id = props.playlist.id;
    let res = await api_playlist_update(param);
    if (res.code === ErrorCode.success)
    {
      message.success('编辑成功');
      emits('close');
    }
    else {
      message.error(res.msg);
    }
  }
  else {
    // 创建歌单
    let res = await api_playlist_add(param);
    if (res.code === ErrorCode.success)
    {
      message.success('创建成功');
      emits('close');
    }
    else {
      message.error(res.msg);
    }
  }
}

</script>

<template>
  <div class="dialog-content form-dialog">
    <div class="dialog-title">
      {{ isEdit? '编辑歌单' : '创建歌单' }}
      <div
          class="close-btn"
          @click="closeDialog()">
        X
      </div>

    </div>
    <div class="dialog-show">
      <div class="form-row" >
        <kui-input label="歌单名称"
                   placeholder="歌单的名称"
                   v-model:value="playlistName"
        />
      </div>

      <div class="form-row mt-4"
           v-if="isLike"
      >
        <kui-input
            label="歌单描述"
            placeholder="歌单的描述"
            v-model:value="description"
        />
      </div>

      <div class="form-row mt-4">
        <kui-checkbox id="isPublicPlaylist" v-model:value="isPublic" >
          是否公开
        </kui-checkbox>
      </div>


    </div>
    <div class="dialog-footer">
      <div class="btn cancel-btn mr-2" @click="closeDialog()">取消</div>
      <div class="btn primary-btn" @click="submitHandle">确定</div>
    </div>
  </div>
</template>

<style scoped>
.form-row{
  width: 90%;
  height: 40px;
  display: flex;
  align-items: center;
  margin: 1rem auto;
}
</style>