package UI

import (
	"fmt"
	"io/ioutil"
	"path/filepath"
	"strings"

	"github.com/veandco/go-sdl2/ttf"

	"github.com/cuu/gogame/rect"

	"github.com/cuu/gogame/color"
	"github.com/cuu/gogame/draw"
	"github.com/cuu/gogame/surface"
)

type ListItemIcon struct {
	IconItem
}

func NewListItemIcon() *ListItemIcon {
	p := &ListItemIcon{}
	p.MyType = ICON_TYPES["EXE"]

	p.Align = ALIGN["VCenter"]

	p.Width = 18
	p.Height = 18

	return p
}

func (self *ListItemIcon) Draw() {
	_, h := self.Parent.Size()

	rect_ := rect.Rect(self.PosX, self.PosY+(h-self.Height)/2, self.Width, self.Height)

	surface.Blit(self.Parent.GetCanvasHWND(), self.ImgSurf, &rect_, nil)
}

/// [..] [.]
type HierListItem struct {
	ListItem
	MyType  int
	Path    string
	Active  bool
	Playing bool
}

var HierListItemDefaultHeight = 32

func NewHierListItem() *HierListItem {
	p := &HierListItem{}
	p.Labels = make(map[string]LabelInterface)
	p.Icons = make(map[string]IconItemInterface)
	p.Fonts = make(map[string]*ttf.Font)

	p.MyType = ICON_TYPES["EXE"]
	p.Height = HierListItemDefaultHeight
	p.Width = 0

	return p
}

func (self *HierListItem) IsFile() bool {
	if self.MyType == ICON_TYPES["FILE"] {
		return true
	}

	return false
}

func (self *HierListItem) IsDir() bool {
	if self.MyType == ICON_TYPES["DIR"] {
		return true
	}

	return false
}

func (self *HierListItem) Init(text string) {
	l := NewLabel()
	l.PosX = 20
	if self.Parent == nil {
		fmt.Println("Parent nil")
		return
	}
	l.SetCanvasHWND(self.Parent.GetCanvasHWND())

	if self.IsDir() == true || self.IsFile() == true {
		self.Path = text
	}

	label_text := filepath.Base(text)
	ext := filepath.Ext(text)
	if ext != "" {
		alias_file := strings.Replace(text, ext, "", -1) + ".alias"

		if FileExists(alias_file) == true {
			b, err := ioutil.ReadFile(alias_file)
			if err != nil {
				fmt.Print(err)
			} else {
				label_text = string(b)
			}
		}

	}

	if self.IsDir() == true {
		l.Init(label_text, self.Fonts["normal"], nil)
	} else {
		l.Init(label_text, self.Fonts["normal"], nil)
	}

	self.Labels["Text"] = l
}

func (self *HierListItem) Draw() {

	x, y := self.Labels["Text"].Coord()
	_, h := self.Labels["Text"].Size()

	if self.Path != "[..]" {
		self.Labels["Text"].NewCoord(23, y)

	} else {
		self.Labels["Text"].NewCoord(3, y)
	}

	x, y = self.Labels["Text"].Coord()
	self.Labels["Text"].NewCoord(x, self.PosY+(self.Height-h)/2)

	self.Labels["Text"].Draw()

	/*
	  w,h := self.Parent.Icons["sys"].Size()

	  if self.IsDir() == true && self.Path != "[..]" {
	    self.Parent.Icons["sys"].IconIndex = 0
	    self.Parent.Icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2)
	    self.Parent.Icons["sys"].Draw()
	  }

	  if self.IsFile() == true {
	    self.Parent.Icons["sys"].IconIndex = 1
	    self.Parent.Icons["sys"].NewCoord(self.PosX+12,self.PosY+(self.Height-h)/2+h/2)
	    self.Parent.Icons["sys"].Draw()
	  }
	*/

	draw.Line(self.Parent.GetCanvasHWND(), &color.Color{169, 169, 169, 255},
		self.PosX, self.PosY+self.Height-1, self.PosX+self.Width, self.PosY+self.Height-1, 1)

}
