package database

import (
	"database/sql"
	"fmt"

	"daemonService/internal/config"

	_ "github.com/lib/pq"
)

// InitDB inicializa la conexión a la base de datos y crea las tablas si no existen.
func InitDB(cfg config.Config) (*sql.DB, error) {
	connStr := fmt.Sprintf(
		"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
		cfg.Database.Host,
		cfg.Database.Port,
		cfg.Database.User,
		cfg.Database.Password,
		cfg.Database.DBName,
		cfg.Database.SSLMode,
	)

	db, err := sql.Open("postgres", connStr)
	if err != nil {
		return nil, err
	}

	// Verificar la conexión
	if err = db.Ping(); err != nil {
		return nil, err
	}

	// Crear tabla para tipos de documento de identidad si no existe
	//_, err = db.Exec(`
	//	CREATE TABLE IF NOT EXISTS tipo_documento_identidad (
	//		codigo VARCHAR(10) PRIMARY KEY,
	//		descripcion TEXT NOT NULL,
	//		fecha_actualizacion TIMESTAMP NOT NULL
	//	)
	//`)
	//if err != nil {
	//	return nil, err
	//}

	// Crear tabla para el log de sincronización
	//_, err = db.Exec(`
	//	CREATE TABLE IF NOT EXISTS log_sincronizacion (
	//		id SERIAL PRIMARY KEY,
	//		servicio VARCHAR(50) NOT NULL,
	//		req_soap TEXT,
	//		resp_soap TEXT,
	//		req_json TEXT,
	//		resp_json TEXT,
	//		fecha TIMESTAMP NOT NULL
	//	)
	//`)
	//if err != nil {
	//	return nil, err
	//}

	return db, nil
}

// package db

// import (
// 	"database/sql"
// 	"fmt"

// 	"daemonService/internal/config"

// 	_ "github.com/lib/pq"
// )

// // Init inicializa la conexión a la base de datos y crea las tablas necesarias.
// func Init(cfg *config.Config) (*sql.DB, error) {
// 	connStr := fmt.Sprintf(
// 		"host=%s port=%d user=%s password=%s dbname=%s sslmode=%s",
// 		cfg.Database.Host,
// 		cfg.Database.Port,
// 		cfg.Database.User,
// 		cfg.Database.Password,
// 		cfg.Database.DBName,
// 		cfg.Database.SSLMode,
// 	)

// 	db, err := sql.Open("postgres", connStr)
// 	if err != nil {
// 		return nil, err
// 	}

// 	// Verificar la conexión
// 	if err = db.Ping(); err != nil {
// 		return nil, err
// 	}

// 	// Crear tabla para tipo de documento de identidad
// 	_, err = db.Exec(`
// 		CREATE TABLE IF NOT EXISTS tipo_documento_identidad (
// 			codigo VARCHAR(10) PRIMARY KEY,
// 			descripcion TEXT NOT NULL,
// 			fecha_actualizacion TIMESTAMP NOT NULL
// 		)
// 	`)
// 	if err != nil {
// 		return nil, err
// 	}

// 	// Crear tabla de log para auditoría
// 	_, err = db.Exec(`
// 		CREATE TABLE IF NOT EXISTS log_sincronizacion (
// 			id SERIAL PRIMARY KEY,
// 			servicio VARCHAR(50) NOT NULL,
// 			req_soap TEXT,
// 			resp_soap TEXT,
// 			req_json TEXT,
// 			resp_json TEXT,
// 			fecha TIMESTAMP NOT NULL
// 		)
// 	`)
// 	if err != nil {
// 		return nil, err
// 	}

// 	return db, nil
// }
