<?php



namespace App\Http\Controllers;



use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Response;

use Illuminate\Support\Facades\Storage;

class WinController extends Controller
{

    public function selectwinventa()
    { // Fecha de inicio: 5 días antes del primer día del mes actual
        $fechaInicio = Carbon::now()->startOfMonth()->subDays(5);
    
        // Fecha de fin: último día del mes actual
        $fechaFin = Carbon::now()->endOfMonth()->endOfDay();

        $ventas = DB::table('TBL_WIN_VENTA')


 ->join('TB_velocidades', 'TBL_WIN_VENTA.velocidad', '=', 'TB_velocidades.id')
 ->leftJoin('TB_opciones_tv', 'TB_opciones_tv.id', '=', 'TBL_WIN_VENTA.tv')
 ->leftJoin('TB_opciones_fijo', 'TB_opciones_fijo.id', '=', 'TBL_WIN_VENTA.fijo')
 ->leftJoin('TB_tipos_servicio', 'TB_tipos_servicio.id', '=', 'TBL_WIN_VENTA.oferta')
 ->select(
     'TBL_WIN_VENTA.id',
     'TBL_WIN_VENTA.fecharegistro',
     'TBL_WIN_VENTA.operadorventa',
     'TBL_WIN_VENTA.estado',
     'TBL_WIN_VENTA.notascalidad',
     'TBL_WIN_VENTA.fechaprogramdawin',
     'TBL_WIN_VENTA.tramo',
     'TBL_WIN_VENTA.fechainstalacion',
     'TBL_WIN_VENTA.tipoDocumentoTitular',
     'TBL_WIN_VENTA.documento',
     'TBL_WIN_VENTA.nombres',
     'TBL_WIN_VENTA.apellidos',
     'TBL_WIN_VENTA.celular',
     'TBL_WIN_VENTA.tipoDocumento',
     'TBL_WIN_VENTA.dnivendedor',
     'TB_tipos_servicio.nombre as oferta',
     'TB_velocidades.velocidad_mbps',
     'TB_opciones_tv.nombre as tv',
     DB::raw("CASE WHEN TB_opciones_fijo.disponible = 1 THEN 'FIJO' END as dispofijo")
 )
 ->whereBetween('TBL_WIN_VENTA.fecharegistro', [$fechaInicio, $fechaFin])
 ->orderBy('TBL_WIN_VENTA.fecharegistro', 'DESC')
 ->get();



        return view('winventas.winventas_view', compact('ventas'));

    }

    public function selectwinventabyuser()
    {
        $ventas = DB::table('TBL_WIN_VENTA')
        ->join('TB_velocidades', 'TBL_WIN_VENTA.velocidad', '=', 'TB_velocidades.id')
        ->leftJoin('TB_opciones_tv', 'TB_opciones_tv.id', '=', 'TBL_WIN_VENTA.tv')
        ->leftJoin('TB_opciones_fijo', 'TB_opciones_fijo.id', '=', 'TBL_WIN_VENTA.fijo')
        ->leftJoin('TB_tipos_servicio', 'TB_tipos_servicio.id', '=', 'TBL_WIN_VENTA.oferta')
        ->select(
            'TBL_WIN_VENTA.id',
            'TBL_WIN_VENTA.fecharegistro',
            'TBL_WIN_VENTA.operadorventa',
            'TBL_WIN_VENTA.estado',
            'TBL_WIN_VENTA.notascalidad',
            'TBL_WIN_VENTA.fechaprogramdawin',
            'TBL_WIN_VENTA.tramo',
            'TBL_WIN_VENTA.fechainstalacion',
            'TBL_WIN_VENTA.tipoDocumentoTitular',
            'TBL_WIN_VENTA.documento',
            'TBL_WIN_VENTA.nombres',
            'TBL_WIN_VENTA.apellidos',
            'TBL_WIN_VENTA.celular',
            'TBL_WIN_VENTA.tipoDocumento',
            'TBL_WIN_VENTA.dnivendedor',
            'TB_tipos_servicio.nombre as oferta',
            'TB_velocidades.velocidad_mbps',
            'TB_opciones_tv.nombre as tv',
            DB::raw("CASE WHEN TB_opciones_fijo.disponible = 1 THEN 'FIJO' END as dispofijo")
        )

            ->whereMonth('TBL_WIN_VENTA.fecharegistro', Carbon::now()->month)
            ->whereYear('TBL_WIN_VENTA.fecharegistro', Carbon::now()->year)
            ->where('TBL_WIN_VENTA.dnivendedor', Auth::user()->username)  // 👈 aquí agregamos el filtro
            ->get();

        return view('winventas.winventas_view_by_user', compact('ventas'));
    }


    public function selectwinventafiltro(Request $request)
{
    $query = DB::table('TBL_WIN_VENTA')
        ->join('TB_velocidades', 'TBL_WIN_VENTA.velocidad', '=', 'TB_velocidades.id')
        ->leftJoin('TB_opciones_tv', 'TB_opciones_tv.id', '=', 'TBL_WIN_VENTA.tv')
        ->leftJoin('TB_opciones_fijo', 'TB_opciones_fijo.id', '=', 'TBL_WIN_VENTA.fijo')
        ->leftJoin('TB_tipos_servicio', 'TB_tipos_servicio.id', '=', 'TBL_WIN_VENTA.oferta')
        ->select(
            'TBL_WIN_VENTA.id',
            'TBL_WIN_VENTA.fecharegistro',
            'TBL_WIN_VENTA.operadorventa',
            'TBL_WIN_VENTA.estado',
            'TBL_WIN_VENTA.notascalidad',
            'TBL_WIN_VENTA.fechaprogramdawin',
            'TBL_WIN_VENTA.tramo',
            'TBL_WIN_VENTA.fechainstalacion',
            'TBL_WIN_VENTA.tipoDocumentoTitular',
            'TBL_WIN_VENTA.documento',
            'TBL_WIN_VENTA.nombres',
            'TBL_WIN_VENTA.apellidos',
            'TBL_WIN_VENTA.celular',
            'TBL_WIN_VENTA.tipoDocumento',
            'TBL_WIN_VENTA.dnivendedor',
            'TB_tipos_servicio.nombre as oferta',
            'TB_velocidades.velocidad_mbps',
            'TB_opciones_tv.nombre as tv',
            DB::raw("CASE WHEN TB_opciones_fijo.disponible = 1 THEN 'FIJO' END as dispofijo")
        );

    /*
    |--------------------------------------------------------------------------
    | 1️⃣ DNI manda sobre todo
    |--------------------------------------------------------------------------
    */
    if ($request->filled('dni')) {
        $query->where('TBL_WIN_VENTA.documento', $request->dni);
        return response()->json($query->get());
    }

    /*
    |--------------------------------------------------------------------------
    | 2️⃣ Operador
    |--------------------------------------------------------------------------
    */
    if ($request->filled('operador') && $request->operador !== 'Todos') {
        $query->where('TBL_WIN_VENTA.operadorventa', $request->operador);
    }

    /*
    |--------------------------------------------------------------------------
    | 3️⃣ Rango dinámico según tipo_rango
    |--------------------------------------------------------------------------
    */
    $tipo = $request->tipo_rango;

    // Mapeo limpio columna ←→ tipo
    $columnasFecha = [
        'registro'     => 'TBL_WIN_VENTA.fecharegistro',
        'programacion' => 'TBL_WIN_VENTA.fechaprogramdawin',
        'instalacion'  => 'TBL_WIN_VENTA.fechainstalacion',
    ];

    if (!isset($columnasFecha[$tipo])) {
        return response()->json([]);
    }

    $columna = $columnasFecha[$tipo];

    if ($request->filled('fecha_inicio') && $request->filled('fecha_fin')) {
        $query->whereBetween($columna, [
            $request->fecha_inicio,
            $request->fecha_fin
        ]);
    } elseif ($request->filled('fecha_inicio')) {
        $query->whereDate($columna, '>=', $request->fecha_inicio);
    } elseif ($request->filled('fecha_fin')) {
        $query->whereDate($columna, '<=', $request->fecha_fin);
    } else {
        // sin rango → no devuelve nada
        return response()->json([]);
    }

    /*
|--------------------------------------------------------------------------
| 4️⃣ Estado automático según tipo_rango
|--------------------------------------------------------------------------
*/
if ($tipo === 'programacion') {
    $query->where('TBL_WIN_VENTA.estado', 6);
}

if ($tipo === 'instalacion') {
    $query->where('TBL_WIN_VENTA.estado', 5);
}
    /*
    |--------------------------------------------------------------------------
    | 4️⃣ Estado SOLO si es registro
    |--------------------------------------------------------------------------
    */
    if ($tipo === 'registro' && $request->filled('estado') && $request->estado !== 'Todos') {
        $query->where('TBL_WIN_VENTA.estado', $request->estado);
    }

    return response()->json($query->get());
}

    public function selectwinventafiltro2(Request $request)
{ 
    $query = DB::table('TBL_WIN_VENTA')
        ->join('TB_velocidades', 'TBL_WIN_VENTA.velocidad', '=', 'TB_velocidades.id')
        ->leftJoin('TB_opciones_tv', 'TB_opciones_tv.id', '=', 'TBL_WIN_VENTA.tv')
        ->leftJoin('TB_opciones_fijo', 'TB_opciones_fijo.id', '=', 'TBL_WIN_VENTA.fijo')
        ->leftJoin('TB_tipos_servicio', 'TB_tipos_servicio.id', '=', 'TBL_WIN_VENTA.oferta')
        ->select(
            'TBL_WIN_VENTA.id',
            'TBL_WIN_VENTA.fecharegistro',
            'TBL_WIN_VENTA.operadorventa',
            'TBL_WIN_VENTA.estado',
            'TBL_WIN_VENTA.notascalidad',
            'TBL_WIN_VENTA.fechaprogramdawin',
            'TBL_WIN_VENTA.tramo',
            'TBL_WIN_VENTA.fechainstalacion',
            'TBL_WIN_VENTA.tipoDocumentoTitular',
            'TBL_WIN_VENTA.documento',
            'TBL_WIN_VENTA.nombres',
            'TBL_WIN_VENTA.apellidos',
            'TBL_WIN_VENTA.celular',
            'TBL_WIN_VENTA.tipoDocumento',
            'TBL_WIN_VENTA.dnivendedor',
            'TB_tipos_servicio.nombre as oferta',
            'TB_velocidades.velocidad_mbps',
            'TB_opciones_tv.nombre as tv',
            DB::raw("CASE WHEN TB_opciones_fijo.disponible = 1 THEN 'FIJO' END as dispofijo")
        );

    // Si hay DNI, buscar solo por este
    if ($request->filled('dni')) {
        $query->where('TBL_WIN_VENTA.documento', $request->dni);
    } else {
        if ($request->filled('operador') && $request->operador != 'Todos') {
            $query->where('TBL_WIN_VENTA.operadorventa', $request->operador);
        }

        // Si no hay fecha_inicio NI fecha_fin → devolver vacío
        if (!$request->filled('fecha_inicio') && !$request->filled('fecha_fin')) {
            return response()->json([]); // Sin resultados
        }

        if ($request->filled('fecha_inicio') && $request->filled('fecha_fin')) {
            $query->whereBetween('TBL_WIN_VENTA.fecharegistro', [
                $request->fecha_inicio,
                $request->fecha_fin
            ]);
        } elseif ($request->filled('fecha_inicio')) {
            $query->whereDate('TBL_WIN_VENTA.fecharegistro', '>=', $request->fecha_inicio);
        } elseif ($request->filled('fecha_fin')) {
            $query->whereDate('TBL_WIN_VENTA.fecharegistro', '<=', $request->fecha_fin);
        }

        if ($request->filled('estado') && $request->estado != 'Todos') {
            $query->where('TBL_WIN_VENTA.estado', $request->estado);
        }
    }

    return response()->json($query->get());
}


    public function selectwinventabyid(Request $request)
    {

        $filtro = $request->input('id');



        // Obtener los datos de la base de datos utilizando el método select de DB con una cláusula WHERE

        $opciones = DB::select('SELECT

                                        TBL_WIN_VENTA.id,

                                        TBL_WIN_VENTA.imagenScore,

                                        TBL_WIN_VENTA.dnivendedor,

                                        TBL_WIN_VENTA.nombres,

                                        TBL_WIN_VENTA.apellidos,

                                        TBL_WIN_VENTA.documento,

                                        TBL_WIN_VENTA.tipoDocumento,

                                        TBL_WIN_VENTA.imagenDelanteraDocumento,

                                        TBL_WIN_VENTA.imagenTraseraDocumento,

                                        TBL_WIN_VENTA.celular,

                                        TBL_WIN_VENTA.whatsapp,

                                        TBL_WIN_VENTA.correo,

                                     ubigeo_peru_departments.name  as departamento1,
                                      ubigeo_peru_provinces.name as provincia1,

                                     ubigeo_peru_districts.name as distrito1 ,

                                        TBL_WIN_VENTA.direccion,
                                        TB_tipos_servicio.nombre as tiposervicio,
                                        TBL_WIN_VENTA.referencia,

                                        TBL_WIN_VENTA.coordenadas,

                                        TBL_WIN_VENTA.relacionPredio,

                                        TBL_WIN_VENTA.nombresTitularLinea,

                                        TBL_WIN_VENTA.apellidosTitularLinea,

                                        TBL_WIN_VENTA.tipoDocumentoTitular,

                                        TBL_WIN_VENTA.parentesco,

                                        TBL_WIN_VENTA.documentoTitular,

                                        TBL_WIN_VENTA.operador,

                                        TBL_WIN_VENTA.observacion,

                                        TBL_WIN_VENTA.tipoplan,

                                        TBL_WIN_VENTA.plan_contra,

                                        TBL_WIN_VENTA.couta,

                                        TBL_WIN_VENTA.canmesh,

                                        TBL_WIN_VENTA.meshcableado,

                                        TBL_WIN_VENTA.winbox,

                                        TBL_WIN_VENTA.numeroaportar,

                                        TBL_WIN_VENTA.piso,

                                        TBL_WIN_VENTA.tdomi,

                                        TBL_WIN_VENTA.estado,

                                         TBL_WIN_VENTA.interior,

                                      
          TBL_WIN_VENTA.fechaprogramdawin,
                    TBL_WIN_VENTA.tramo,
                    TBL_WIN_VENTA.fechainstalacion,
                    TBL_WIN_VENTA.fecharegistro,
                    
 TBL_WIN_VENTA.operadorventa,
     TBL_WIN_VENTA.notascalidad,
             TBL_WIN_VENTA.finstalacionasesor,
  TBL_WIN_VENTA.tramoasesor

                                        FROM TBL_WIN_VENTA
left join ubigeo_peru_departments on ubigeo_peru_departments.id =  TBL_WIN_VENTA.departamento
left join ubigeo_peru_provinces on ubigeo_peru_provinces.id = TBL_WIN_VENTA.provincia
left join ubigeo_peru_districts on  ubigeo_peru_districts.id = TBL_WIN_VENTA.distrito
left join TB_tipos_servicio on  TB_tipos_servicio.id = TBL_WIN_VENTA.oferta




                                       WHERE TBL_WIN_VENTA.id = ? ', [$filtro]);



        return response()->json($opciones);

        //return response()->json($opciones[0]);

    }



    public function selectplanclienteopcionesid(Request $request)
    {

        $filtro = $request->input('filtro');



        // Obtener los datos de la base de datos utilizando el método select de DB con una cláusula WHERE

        $opciones = DB::select('SELECT id, nombre FROM TBL_WIN_PLAN_CONTRATADO WHERE tipo_plan = ?', [$filtro]);



        return response()->json($opciones);

    }







    public function store(Request $request)
    {

        // Configuración de directorio de subida

        $uploadDir = 'documentos/dniventawin/';



        // Obtener fecha y hora actual

        $fechaHora = now()->format('Ymd_His');



        // Array para almacenar las rutas de las imágenes subidas

        $imagePaths = [];



        // Procesar la imagen del score

        if ($request->hasFile('imagenScore')) {

            $file = $request->file('imagenScore');

            $fileName = $request->input('documento') . '_score_' . $fechaHora . '.' . $file->getClientOriginalExtension();

            $file->storeAs($uploadDir, $fileName);

            $imagePaths['imagenScore'] = $fileName;

        }



        // Procesar la imagen delantera del documento

        if ($request->hasFile('imagenDelanteraDocumento')) {

            $file = $request->file('imagenDelanteraDocumento');

            $fileName = $request->input('documento') . '_frente_' . $fechaHora . '.' . $file->getClientOriginalExtension();

            $file->storeAs($uploadDir, $fileName);

            $imagePaths['imagenDelanteraDocumento'] = $fileName;

        }



        // Procesar la imagen trasera del documento

        if ($request->hasFile('imagenTraseraDocumento')) {

            $file = $request->file('imagenTraseraDocumento');

            $fileName = $request->input('documento') . '_trasera_' . $fechaHora . '.' . $file->getClientOriginalExtension();

            $file->storeAs($uploadDir, $fileName);

            $imagePaths['imagenTraseraDocumento'] = $fileName;

        }

        // Insertar datos en la base de datos, incluyendo las rutas de las imágenes

        DB::table('TBL_WIN_VENTA')->insert([

            'imagenScore' => $imagePaths['imagenScore'] ?? null,

          //  'dnivendedor' => $request->input('dnivendedor'),

            'nombres' => $request->input('nombres'),

            'apellidos' => $request->input('apellidos'),

            'tipoDocumento' => $request->input('tipoDocumento'),

            'documento' => $request->input('documento'),

            'imagenDelanteraDocumento' => $imagePaths['imagenDelanteraDocumento'] ?? null,

            'imagenTraseraDocumento' => $imagePaths['imagenTraseraDocumento'] ?? null,

            'celular' => $request->input('celular'),

            'whatsapp' => $request->input('whatsapp'),

            'correo' => $request->input('correo'),

            'departamento' => $request->input('departamento'),

            'provincia' => $request->input('provincia'),

            'distrito' => $request->input('distrito'),

            'direccion' => $request->input('direccion'),

            'referencia' => $request->input('referencia'),

            'coordenadas' => $request->input('coordenadas'),

            'relacionPredio' => $request->input('relacionPredio'),

            'nombresTitularLinea' => $request->input('nombresTitularLinea'),

            'apellidosTitularLinea' => $request->input('apellidosTitularLinea'),

            'tipoDocumentoTitular' => $request->input('tipoDocumentoTitular'),

            'documentoTitular' => $request->input('documentoTitular'),

            'parentesco' => $request->input('parentesco'),

            'operador' => $request->input('operador'),

            'observacion' => $request->input('observacion'),

        

            'couta' => $request->input('cuota'),

            'canmesh' => $request->input('canmesh'),

            'meshcableado' => $request->input('mecableado'),

            'winbox' => $request->input('winbo'),

            'numeroaportar' => $request->input('portatnumeot'),

            'piso' => $request->input('piso'),

            'tdomi' => $request->input('tcasa'),
            'operadorventa' => $request->input('operadorventa'),
            
            'dnivendedor' => Auth::user()->username,
            'oferta' => $request->input('tipo'),
            'velocidad' => $request->input('velocidad'),
            'tv' => $request->input('tv'),
            'fijo' => $request->input('fijo'),
            'finstalacionasesor' => $request->input('fechacliente'),
            'tramoasesor' => $request->input('freamoxcliente'),
            'interior' => $request->input('interior'),


            
        ]);



        return redirect()->back()->with('success', 'Datos guardados exitosamente');

    }


    public function winregistrovista()
    {
        return view('winventas.winventas_view_reg_ventaw');
    }

    public function ventaregperufibra()
    {
        return view('winventas.perufibraventas_view_reg_ventaw');
    }


    public function updateval(Request $request, $id)
    {
        $actualizado = DB::table('TBL_WIN_VENTA')
            ->where('id', $id)
            ->update([
                'fechainstalacion' => $request->fechaInstalacion,
                'fechaprogramdawin' => $request->fechaProgramacion,
                'estado' => $request->status,
                'operadorventa' => $request->operasor,
                'tramo' => $request->tramo,
                'notascalidad' => $request->notascalidad



            ]);

        if ($actualizado) {
            return response()->json(['message' => 'Registro actualizado correctamente']);
        }

        return response()->json(['message' => 'Error al actualizar']);
    }
}