IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[SPWEB_SIFREDEGISTIR]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE SPWEB_SIFREDEGISTIR
GO

CREATE PROCEDURE [dbo].[SPWEB_SIFREDEGISTIR]
	@kisino NVARCHAR(30),
	@mevcutsifre nvarchar(100),
	@yenisifre nvarchar(100),
	@yenisifretekrar nvarchar(100)
AS
BEGIN
	DECLARE @HKIMLIKID INT = dbo.FN_BASIT_ID_SIFRE_AC(@kisino)	

	DECLARE @KUCUKHARF BIT =0
	DECLARE @BUYUKHARF BIT =0
	DECLARE @RAKAM BIT =0
	DECLARE @GECERSIZ BIT =0
	DECLARE @SIFREUZUNLUK INT = 1
	DECLARE @KARAKTERKOD INT = 0
	

	IF ISNULL(@kisino,'')='' OR ISNULL(@mevcutsifre,'')='' OR ISNULL(@yenisifre,'')='' OR ISNULL(@yenisifretekrar,'')=''
	BEGIN
		SELECT 4 as result, 'Şifre bilgisi eksik' as resultdesc
		RETURN
	END


	IF ISNULL(@yenisifre,'') <>ISNULL(@yenisifretekrar,'')
	BEGIN
		SELECT 5 as result, 'Şifre tekrarını yanlış girdiniz' as resultdesc
		RETURN
	END

	IF ISNULL(@mevcutsifre,'') = ISNULL(@yenisifretekrar,'')
	BEGIN
		SELECT 6 as result, 'Şifreniz mevcut şifrenizden farklı olmalı' as resultdesc
		RETURN
	END

	IF LEN(REPLACE(ISNULL(@yenisifre,''),' ',''))<6
	BEGIN
		SELECT 7 as result, 'Yeni şifreniz en az 6 karakter olmalı' as resultdesc
		RETURN
	END

	IF LEN(REPLACE(ISNULL(@yenisifre,''),' ',''))<6
	BEGIN
		SELECT 7 as result, 'Yeni şifreniz en az 6 karakter olmalı' as resultdesc
		RETURN
	END

	WHILE @SIFREUZUNLUK<= LEN(@yenisifre)
	BEGIN
		SET @KARAKTERKOD = ASCII(SUBSTRING(@yenisifre,@SIFREUZUNLUK,1))
		IF @KARAKTERKOD BETWEEN 48 AND 57
		BEGIN
			SET @RAKAM=1
		END
		ELSE IF @KARAKTERKOD BETWEEN 97 AND 122
		BEGIN
			SET @KUCUKHARF=1
		END
		ELSE IF @KARAKTERKOD BETWEEN 65 AND 90
		BEGIN
			SET @BUYUKHARF=1
		END
		ELSE
		BEGIN
			SET @GECERSIZ=1
		END

		SET @SIFREUZUNLUK=@SIFREUZUNLUK+1
	END

	IF @GECERSIZ=1
	BEGIN
		SELECT 8 as result, 'Şifrenizde geçersiz karakter bulunuyor. Türkçe karakter veya özel karakter kullanmayınız.' as resultdesc
		RETURN
	END

	IF (NOT (@RAKAM=1 AND @KUCUKHARF=1 AND @BUYUKHARF=1))
	BEGIN
		SELECT 9 as result, 'Şifrenizde rakam, büyük ve küçük harf olmalıdır' as resultdesc
		RETURN
	END


	IF (SELECT COUNT(*) FROM HKIMLIK WITH(NOLOCK) WHERE HKIMLIKID=@HKIMLIKID AND HWEBSIFRE=@mevcutsifre) = 0
	BEGIN
		SELECT 10 as result, '	Mevcut şifrenizi yanlış girdiniz' as resultdesc
		RETURN
	END	
	
	UPDATE HKIMLIK SET HWEBSIFRE = @yenisifre, HWEBSIFRETARIHI=GETDATE() WHERE HKIMLIKID=@HKIMLIKID
	DECLARE @LOGICERIK NVARCHAR(500) = 'Eski Sifre:'+@mevcutsifre
	EXEC SPWEB_LOGLA 'sifredegistir',@HKIMLIKID,@LOGICERIK,''
	SELECT 1 as result, 'Şifreniz başarıyla değiştirildi' as resultdesc

END
GO

IF EXISTS (SELECT [name] FROM [sys].[database_principals] WHERE [type] = N'S' AND [name] = N'mediwebuser')
BEGIN
	BEGIN TRY
		GRANT EXECUTE ON [dbo].[SPWEB_SIFREDEGISTIR] TO [mediwebuser]
	END TRY
	BEGIN CATCH
	END CATCH
END
GO

