<template>
<div class="page">
<h2>Settings</h2>

<section class="form inputs">
<h3>Avatar</h3>
<canvas class="displayer" width="200" height="200" ref="avatar"></canvas>
<input type="file"
@change="e => uploadAvatar(e.target.files[0])"
/>
<button>Upload</button>
<label class="error">{{avatarError}}</label>
</section>

<section class="form inputs">
<h3>Letterhead</h3>
<canvas class="displayer" width="200" height="200" ref="letterhead"></canvas>
<input type="file"
@change="e => uploadLetterhead(e.target.files[0])"
/>
<button>Upload</button>
<label class="error">{{avatarError}}</label>
</section>

<section class="form inputs special">
<h3>Profile</h3>
<label for="">First Name</label>
<input type="text">
<label for="">Last Name</label>
<input type="text">
<label for="">NMLS ID</label>
<input type="text">
<label for="">Branch ID</label>
<input type="text">

<select id="" name="" >
	<option value="usa">USA</option>
	<option value="canada">Canada</option>
</select>

<button @click="check">Save</button>
</section>

<section class="form inputs special">
<h3>Login</h3>
<label for="">Email</label>
<input type="text">
<label for="">New Password</label>
<input type="text">
<button @click="check">Save</button>
</section>

<Dialog v-if="ready" @close="() => ready = false">
<h3>Confirm your current password to save changes.</h3>
<input type="text">
<button>Confirm</button>
</Dialog>

</div>
</template>

<script setup>
import { ref, watch, onMounted } from "vue"
import Dialog from "./dialog.vue"

let avatar = ref(null) // the canvas element
let letterhead = ref(null) // the canvas element
let ready = ref(false)
let avatarChanged = ref(false)
let avatarError = ref('')
let letterheadError = ref('')
const props = defineProps(['user', 'token'])
const emit = defineEmits(['updateAvatar', 'updateLetterhead'])

function save() {
}

function check() {
	ready.value = true
}

function uploadAvatar(blob) {
    changeAvatar(blob)?.then(() => {
        avatar.value.toBlob(b => {
            fetch(`/api/user/avatar`,
		    {method: 'POST',
		        body: b,
        		headers: {
            	"Accept": "application/json",
            	"Authorization": `Bearer ${props.token}`,
        		},
	        }).then(resp => {
	            if (resp.ok) {emit('updateAvatar')}
	        })
        })
    })
    
    
    avatar.value.toBlob(b => {
       // uploadAvatar(b)
    })
}

function uploadLetterhead(blob) {
    changeLetterhead(blob)?.then(() => {
        letterhead.value.toBlob(b => {
            fetch(`/api/user/letterhead`,
		    {method: 'POST',
		        body: b,
        		headers: {
            	"Accept": "application/json",
            	"Authorization": `Bearer ${props.token}`,
        		},
	        }).then(resp => {
	            if (resp.ok) {emit('updateLetterhead')}
	        })
        })
    })
    
    
    letterhead.value.toBlob(b => {
       // uploadAvatar(b)
    })
}


function changeAvatar(blob) {
    const validTypes = ['image/jpeg', 'image/png']
    
    if (!validTypes.includes(blob.type)) {
        avatarError.value = 'Image must be JPEG of PNG format'
        return
    }
    
    avatarError.value = ''
    
    return createImageBitmap(blob,
    {resizeWidth: 200, resizeHeight: 200, resizeQuality: 'medium'}).
    then((img) => {
        avatar.value.getContext("2d").drawImage(img, 0, 0, 200, 200)
    })
}

function changeLetterhead(blob) {
    const validTypes = ['image/jpeg', 'image/png']
    
    if (!validTypes.includes(blob.type)) {
        letterheadError.value = 'Image must be JPEG of PNG format'
        return
    }
    
    letterheadError.value = ''
    
    return createImageBitmap(blob,
    {resizeWidth: 200, resizeHeight: 200, resizeQuality: 'medium'}).
    then((img) => {
        letterhead.value.getContext("2d").drawImage(img, 0, 0, 200, 200)
    })
}

watch(props.user, () => {
    if (props.user.avatar) {
       changeAvatar(props.user.avatar) 
    }
    
    if (props.user.letterhead) {
       changeLetterhead(props.user.letterhead) 
    }
}, {immediate: true})

</script>