use crate::net::tools::JsonData;

use super::*;

static UNLOCKED_AVATARS: [u32; 54] = [
    8001, 8002, 8003, 8004, 8005, 8006, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1013, 1101,
    1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1201, 1202, 1203, 1204, 1205,
    1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1217, 1301, 1302, 1303, 1304, 1305,
    1306, 1307, 1308, 1309, 1312, 1315,
];

pub async fn on_get_avatar_data_cs_req(
    session: &mut PlayerSession,
    body: &GetAvatarDataCsReq,
) -> Result<()> {
    let json = JsonData::load().await;
    session
        .send(
            CMD_GET_AVATAR_DATA_SC_RSP,
            GetAvatarDataScRsp {
                retcode: 0,
                is_all: body.is_get_all,
                avatar_list: UNLOCKED_AVATARS
                    .iter()
                    .map(|id| {
                        json.avatars
                            .get(id)
                            .map(|v| {
                                v.to_avatar_proto(
                                    json.lightcones.iter().find(|v| v.equip_avatar == *id),
                                    json.relics
                                        .iter()
                                        .filter(|v| v.equip_avatar == *id)
                                        .collect(),
                                )
                            })
                            .unwrap_or(Avatar {
                                base_avatar_id: *id,
                                level: 80,
                                promotion: 6,
                                rank: 6,
                                ..Default::default()
                            })
                    })
                    .collect(),
                ..Default::default()
            },
        )
        .await
}
