package models

import (
	"errors"
	"fmt"
	"xugu_license/internal/global"
)

type RoleInfo struct {
	Id          int
	Name        string
	Permissions string
}

func CreateRole(r *RoleInfo) error {
	tx, err := global.XuguDB.Begin()
	if err != nil {
		return fmt.Errorf("begin transaction: %v", err)
	}

	defer func() {
		if err != nil {
			tx.Rollback()
		} else {
			err = tx.Commit()
		}
	}()

	_, err = tx.Exec(`
		INSERT INTO RolePermissions (name, permissions) VALUES (?, ?)
	`, r.Name, r.Permissions)
	if err != nil {
		fmt.Println("CreateRole", err)
		return err
	}

	return nil
}

// func ChenckRole(name string) (bool, error) {

// 	// 根据user_id从数据库查询数据
// 	rows, err := global.XuguDB.Query("select ID,USERNAME,PASSWORD,TELEPHONE,EMAIL,ROLE from lic_USER where id = ? ", uid)
// 	if err != nil {
// 		return nil, errors.New(" rows user not found")
// 	}

// 	for rows.Next() {
// 		err = rows.Scan(&u.Id, &u.Username, &u.Password, &u.Telephone, &u.Email, &u.Role)
// 		if err != nil {
// 			fmt.Println("rows.Scan err: ", err)
// 			return nil, errors.New("rows.Next user not found")
// 		}
// 	}
// 	defer rows.Close()
// 	fmt.Println("u: ", u)
// 	u.PrepareGive()
// 	return &u, nil
// }

func GetRoleInfo(name string) ([]RoleInfo, error) {
	// 根据user_id从数据库查询数据
	if name != "" {
		rows, err := global.XuguDB.Query("select * from RolePermissions where name = ? ", name)
		if err != nil {
			return nil, errors.New(" rows user not found")
		}
		var rIs []RoleInfo
		for rows.Next() {
			var r RoleInfo
			err = rows.Scan(&r.Id, &r.Name, &r.Permissions)
			if err != nil {
				fmt.Println("rows.Scan err: ", err)
				return nil, errors.New("rows.Next user not found")
			}
			rIs = append(rIs, r)
		}
		defer rows.Close()

		return rIs, nil
	} else {
		rows, err := global.XuguDB.Query("select * from RolePermissions;")
		if err != nil {
			return nil, errors.New(" rows user not found")
		}
		var rIs []RoleInfo
		for rows.Next() {
			var r RoleInfo
			err = rows.Scan(&r.Id, &r.Name, &r.Permissions)
			if err != nil {
				fmt.Println("rows.Scan err: ", err)
				return nil, errors.New("rows.Next user not found")
			}
			rIs = append(rIs, r)
		}
		defer rows.Close()

		return rIs, nil
	}

}

func UpdateRole(r *RoleInfo) error {
	tx, err := global.XuguDB.Begin()
	if err != nil {
		return fmt.Errorf("begin transaction: %v", err)
	}

	defer func() {
		if err != nil {
			tx.Rollback()
		} else {
			err = tx.Commit()
		}
	}()

	_, err = tx.Exec(`
		UPDATE RolePermissions SET NAME =? ,permissions =? WHERE  Id =?;
	`, r.Name, r.Permissions, r.Id)
	if err != nil {
		fmt.Println("UpdateRole", err)
		return err
	}

	return nil
}

func DeleteRole(name string) error {
	tx, err := global.XuguDB.Begin()
	if err != nil {
		return fmt.Errorf("begin transaction: %v", err)
	}

	defer func() {
		if err != nil {
			tx.Rollback()
		} else {
			err = tx.Commit()
		}
	}()
	//DELETE FROM LicenseApplication WHERE UniqueID = ?", uniqueID
	_, err = tx.Exec(`
		DELETE FROM RolePermissions WHERE NAME =?;
	`, name)
	if err != nil {
		fmt.Println("DeleteRole", err)
		return err
	}

	return nil
}