import { defineStore } from 'pinia';
interface RtcState {
    socket: Nullable<SocketIOClient.Socket>,
    showDaoGou: boolean,
    sdkAppId: string,
    userId: string,
    roomId: string,
    role: 'leader' | 'customer'
    secretKey: string
    userSig: string
    audioDeviceId: string,
    videoDeviceId: string,
    cameraList: MediaDeviceInfo[],
    microphoneList: MediaDeviceInfo[],
    logs: any[],
    isJoined: boolean,
    isPublished: boolean,
    isShared: boolean,
    remoteStreams: any[],
    invitedRemoteStreams: any[],
    avatar: Nullable<string>,
    nickname: Nullable<string>,
    mode: string,
    chatList: ChatContentType[]
}

interface DeviceListParams {
    cameraItems: MediaDeviceInfo[],
    microphoneItems: MediaDeviceInfo[],
}

export interface ChatContentType {
    role: RoleType,
    mode: string,
    Nickname: Nullable<string>,
    UserId: string,
    text: string,
}

export interface UserInfoType {
    UserId: string,
    text: string,
}
export type RoleType = 'leader' | 'customer'
export interface SocketParams {
    userId: string
    roomId: string
    role: RoleType
    avatar: string
    nickname: string
    mode: string
}


export const useRtcStore = defineStore({
    id: 'rtc',
    state: (): RtcState => ({
        socket: null,
        showDaoGou: false,
        sdkAppId: "1400685498",
        nickname: '',
        userId: '',
        roomId: '',
        role: 'customer',
        secretKey: '7500f8938c46c5d3c64621ae7826905eec9723bf218fbcf121242e056a4ee14f',
        userSig: 'eJwtzcsOgjAQBdB-6RaDU2jLI3EhsrHRBdGNK2Po0IyvNAWJxvjvEmA5597c*bLj7hD26FnOohDYYrzJ4LOjhkZ*tejPd7wY9EJwnsV8brXmdnGODMu5AEggExBNSUcPHFQpnkopIJkU34784ApECjBvkB1e8MLJfWyLOAis06Wut4b0tVdL77RVTb35dGXby6o6rVfs9wdhLDRy',
        audioDeviceId: '',
        videoDeviceId: '',
        cameraList: [],
        microphoneList: [],
        logs: [],
        isJoined: false,
        isPublished: false,
        isShared: false,
        remoteStreams: [],
        invitedRemoteStreams: [],
        avatar: null,
        mode: '',
        chatList: []
    }),
    getters: {
        isLeader(): boolean {
            return this.role === 'leader'
        }
    },
    actions: {
        setSocketParams(params: SocketParams): void {
            this.avatar = params.avatar
            this.roomId = params.roomId
            this.userId = params.userId
            this.nickname = params.nickname
            this.role = params.role
        },
        setAvatar(payload: string) {
            this.avatar = payload
            localStorage.setItem('leaderAvatar', payload || '')
        },
        setSocket(payload: SocketIOClient.Socket) {
            this.socket = payload
        },
        setShowDaoGou(payload: boolean) {
            this.showDaoGou = payload
        },

        setUserId(payload: string) {
            this.userId = payload
        },

        setRoomId(payload: string) {
            this.roomId = payload
        },
        setRole(payload: RoleType) {
            this.role = payload
        },

        setDeviceList(payload: DeviceListParams) {
            this.cameraList = payload.cameraItems
            this.microphoneList = payload.microphoneItems
        },

        setVideoDeviceId(payload: string) {
            this.videoDeviceId = payload
        },

        setAudioDeviceId(payload: string) {
            this.audioDeviceId = payload
        },

        setIsJoined(payload: boolean) {
            this.isJoined = payload
        },
        setIsPublished(payload: boolean) {
            this.isPublished = payload
        },
    
        addToChatList(content: ChatContentType) {
            this.chatList.push(content)
        }
    }

})